Tag: static

函数的“静态新”修饰符有什么意义?

今天,我在遗留代码中找到了一些东西。 它具有一个function的“静态新”。 看起来像这样。 class Foo { public static void Do() { Console.WriteLine(“Foo.Do”); } } class Bar: Foo { public static new void Do() { Console.WriteLine(“Bar.Do”); } } 我不理解类Bar中的Do方法的静态new修饰符。 在C#中,只能使用类名而不是对象名来调用静态方法。 因此,我认为拥有“新”与否之间没有任何区别。 通常,如果不需要某些语法,C#只会将其视为错误。 任何人都知道为什么C#允许这样的语法?

单身类可以是静态的吗?

单身类可以是静态的吗?

静态类的好处

可能重复: 静态类的用途是什么 声明静态类有什么好处? public static class MyStaticClass { } 除了“它无法实例化”之外还有其他吗? 为什么你还想要一个静态类,为什么一个类应该是静态的呢? “任何类都应该被声明为静态,除非它意味着被实例化”这是一个很好的经验法则吗?

Java的静态概念与C#的不同之处是什么?

我正在阅读Josh Bloch的书“ Effective Java” ,他建议在构建具有大量成员的对象时使用构建器设计模式。 从我所看到的不是香草设计模式,而是看起来像他的变化。 我更喜欢它的外观,并试图在我正在编写的C#Web应用程序中使用它。 这是用Java编写的代码并且工作得很好 public class Property { private String title; private String area; private int sleeps = 0; public static void main(String[] args) { Property newProperty = new Property.Builder(“Test Property”).Area(“Test Area”).Sleeps(7).build(); } private Property(Builder builder) { this.title = builder.title; this.area = builder.area; this.sleeps =builder.sleeps; } public static class Builder{ private […]

是C#中不同线程共享的静态类

我需要在线程之间共享一个值而不超出它的边界。 静态变量是否这样做?

需要有关OOP理念的建议

我正试图在C#中开启一个大型项目。 我之前的经验是在Delphi中,默认情况下,每个表单都是在应用程序启动时创建的,并且表示在(gasp)全局变量中保存的引用。 因此,我正在努力使我的思维适应100%面向对象的环境,而我的头脑正在旋转一点点。 我的应用程序将有大量的类集合这些类中的大多数只需要一个实例。 所以我在想:静态类。 我不太确定为什么,但我在这里读到的大部分内容都表明,如果我的class级要持有一个状态,我将其视为任何属性值,我应该使用单例结构。 好的。 但是有些人因为逃避我的理由而认为单身人士也是邪恶的。 除了这个程序之外,这些类都没有被用在任何地方的危险。 所以它们当然可以作为常规对象(与单例或静态类)一起工作 然后是对象之间的交互问题。 我很想创建一个充满公共静态属性的Global类,引用许多这些类的单个实例。 我还考虑过制作MainForm的属性(静态或实例,不确定哪个)。 然后我会让每个class级都知道MainForm作为所有者。 然后各种对象可以作为所有者互相引用。 对象1 ,所有者。 对象2等 我担心我的电子墨水耗尽了,或者至少让任何一个人的耐心都受到了这么长时间的困扰。 我希望我已经清楚地解释了我完全混乱的状态。 我只是在寻找一些关于我的最佳实践的建议。 所有输入都受到欢迎和赞赏。 在此先感谢David Jennings

c#从静态函数中打印类名

是否可以在静态函数中打印类名? 例如…… public class foo { static void printName() { // Print the class name eg foo } }

为什么静态类被认为是“类”和“引用类型”?

我今天一直在思考C#和CIL类型系统,我开始想知道为什么静态类被认为是类。 有很多方法它们不是真正的类: “普通”类可以包含非静态成员,静态类则不能。 在这方面,类比结构更类似于静态类,但结构具有单独的名称。 您可以引用“普通”类的实例,但不能引用静态类(尽管它被视为“引用类型”)。 在这方面,类比接口更类似于静态类,但接口具有单独的名称。 静态类的名称永远不能在类型名称通常适合的任何地方使用:您不能声明此类型的变量,您不能将其用作基类型,并且您不能使用它作为generics类型参数。 在这方面,静态类更像名称空间 。 “普通”类可以实现接口。 再次,这使得类更接近结构而不是静态类。 “普通”类可以从另一个类inheritance。 将静态类视为从System.Object派生也是奇怪的。 虽然这允许它们“inheritance”静态方法Equals和ReferenceEquals ,但是inheritance的目的是有问题的,因为无论如何你都会在对象上调用这些方法。 C#甚至允许您在静态类上明确指定无用inheritance,但不能在接口或结构上指定无用inheritance,其中对象和System.ValueType的隐式派生分别实际上有用 。 关于features-of-features参数:静态类具有类的特征的子集,但它们也具有结构特征的子集。 所有使类与其他类型不同的东西似乎都不适用于静态类。 关于typeof参数:将静态类转换为新的不同类型并不妨碍它在typeof中使用 。 鉴于静态类的纯粹奇怪性,以及它们与“普通”类之间的相似性的稀缺性,它们是不是应该被制成一种单独的类型而不是一种特殊的类?

C#无法在静态上下文中访问非静态成员字段,而实际上不在静态上下文中

任何人都可以解释为什么我得到错误“无法在静态上下文中访问非静态字段wtf,即使我不在静态上下文中。 我在行“public int variable = wtf.queuePosition;”上得到错误 class Test { public Test wtf = new Test(); public int variable = wtf.queuePosition; private int queuePosition; public Test() { queuePosition = 5; } }

通用静态字段初始化

我只是对以下代码感到好奇: public static class Container { public static readonly T[] EmptyArray = new T[0]; } 正如我所理解的,当执行以下代码时,将初始化静态类Container: … var emptyArray = Container.EmptyArray; … 我对吗 ? 有关静态generics类/成员初始化的任何解释都将受到赞赏。 提前致谢。