Questions tagged «static-keyword»

10
不要在C#中使用“静态”?
我提交了我写给其他一些架构师的应用程序,以供代码审查。其中一个几乎立即写信给我,说:“不要使用“静态”。您不能使用静态类和方法编写自动测试。要避免使用“静态”。 我检查了一下,并将全部1/4的班级标记为“静态”。当我不打算创建类的实例时,我会使用static,因为该类是整个代码中使用的单个全局类。 他继续提到了涉及模拟,IOC / DI技术的一些静态代码无法使用的技术。他说,由于第三方库不可测试,当第三方库为静态库时很不幸。 这个建筑师是正确的吗? 更新:这是一个示例: APIManager-此类保留我正在调用的第三方API的字典以及下一个允许的时间。它强制执行许多第三方在其服务条款中规定的API使用限制。我可以通过调用Thread.Sleep(APIManager.GetWait(“ ProviderXYZ”))在调用第三方服务的任何地方使用它;在拨打电话之前。这里的所有内容都是线程安全的,并且与C#中的TPL一起使用时效果很好。

4
为什么以及何时使课程“静态”?类上的“静态”关键字的目的是什么?
用static多种语言在成员上使用关键字表示您不应创建该类的实例才能访问该成员。但是,我认为没有理由进行整个课堂学习static。我为什么以及何时上课static? 上课能给我带来什么好处static?我的意思是,在声明静态类之后,仍然应该将他/她希望不带实例化即可访问的所有成员也声明为静态。 例如,这意味着Math可以将类声明为普通(非静态),而不会影响开发人员的编码方式。换句话说,将类设为静态或普通对开发人员而言是透明的。

4
为什么更喜欢非静态内部类而不是静态内部类?
这个问题是关于将Java中的嵌套类做成静态嵌套类还是内部嵌套类。我在这里和Stack Overflow上进行了搜索,但是实际上找不到关于此决定的设计含义的任何问题。 我发现的问题是关于静态和内部嵌套类之间的区别的,这对我来说很明显。但是,我还没有找到令人信服的理由在Java中使用静态嵌套类-匿名类除外,我不考虑这个问题。 这是我对使用静态嵌套类的影响的理解: 更少的耦合:由于类不能直接访问其外部类的属性,因此通常得到的耦合较少。较少的耦合通常意味着更好的代码质量,更容易的测试,重构等。 Single Class:类加载器不需要每次都照顾一个新类,我们创建外部类的对象。我们只是一遍又一遍地获得同一类的新对象。 对于一个内部类,我通常会发现人们认为访问外部类的属性是有利的。从设计的角度来看,我希望在这方面有所不同,因为这种直接访问意味着我们具有很高的耦合度,并且如果我们想将嵌套类提取到其单独的顶层类中,则只能在本质上转向将其转换为静态嵌套类。 所以我的问题归结为:我是否认为非静态内部类可用的属性访问会导致较高的耦合度,从而导致较低的代码质量,我是错误的,并且据此我推断(非匿名)嵌套类应一般是静态的? 或者换句话说:为什么有一个令人信服的理由为什么人们更喜欢嵌套的内部类?

6
了解static关键字
我有一些使用Java,Javascript和PHP开发的经验。 我正在阅读Microsoft Visual C#2010分步教程,我认为这是一本关于向您介绍C#语言的很好的书。 我在理解static关键字时似乎遇到了问题。据我了解,如果将一个类声明为静态,则所有方法和变量都必须为静态。main方法始终是静态方法,因此在类中,main方法存在所有变量,并且如果必须在main方法中调用它们,则将这些方法声明为静态。我还注意到,为了从另一个类调用静态方法,您不需要创建可以使用类名的对象。 但是static关键字的实际目的是什么?什么时候应该声明静态变量和方法?

1
为什么没有工具可以在PHP中重载静态属性?
介绍 PHP使您可以通过在类中声明魔术方法来重载方法调用和属性访问。这将启用以下代码: class Foo { public function __get($name) { return 42; } } $foo = new Foo; echo $foo->missingProperty; // prints "42" 除了重载实例属性和方法外,从PHP 5.3.0开始,我们还可以static通过覆盖magic方法来重载方法调用__callStatic。 缺少的东西 可用功能中明显缺少的是过载静态属性的能力,例如: echo Foo::$missingProperty; // fatal error: access to undeclared static property 此限制已明确记录在案: 属性重载仅在对象上下文中起作用。这些魔术方法不会在静态上下文中触发。因此,不应声明这些方法static。从PHP 5.3.0开始,如果声明了一种魔术重载方法,则会发出警告static。 但为什么? 我的问题是: 是否出于技术原因当前不支持此功能?还是(颤抖的)政治原因? 过去是否有过任何中止尝试添加此功能的尝试? 最重要的是,问题不是 “如何在userland PHP中具有动态静态属性?”。也就是说,如果您知道__callStatic要共享的特别可爱的实现,则一定要这样做。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.