当前位置:  开发笔记 > 编程语言 > 正文

在派生类型上使用类的静态成员?

如何解决《在派生类型上使用类的静态成员?》经验,为你挑选了3个好方法。

使用Resharper 4.1,我遇到了这个有趣的警告:"通过派生类型访问类型的静态成员".以下是发生这种情况的代码示例:

class A {
    public static void SomethingStatic() {
       //[do that thing you do...]
    }
}

class B : A {
}

class SampleUsage {
    public static void Usage() {
        B.SomethingStatic(); // <-- Resharper warning occurs here
    }
}

当通过B使用A的静态成员时,有没有人知道有什么问题(如果有的话)?



1> Greg Beech..:

可能误导性的一个地方是静态是工厂方法,例如,WebRequest类具有工厂方法Create,如果通过派生类访问,则允许写入这种类型的代码.

var request = (FtpWebRequest)HttpWebRequest.Create("ftp://ftp.example.com");

request是类型,FtpWebRequest但它令人困惑,因为它看起来像是从HttpWebRequest(兄弟类)创建的,即使该Create方法实际上是在WebRequest(基类)上定义的.以下代码的含义相同,但更清楚:

var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com");

最终,通过派生类型访问静态没有什么大问题,但是代码通常不清楚.



2> P Daddy..:

B.SomethingStatic()制作成为的SomethingStatic成员的陈述B.这不是真的. SomethingStatic毫无疑问是其中的一员A.事实上,它的成员不合格B(就像它是其成员一样B)是一个方便的问题.事实上,当它与BIMO 合格时,它是可以访问的,这是一个错误.


+1 imo,你的解释是最好的.

3> Daniel Earwi..:

通常,这不是一个警告,只是一个建议.您正在不必要地创建对某些内容的依赖.

假设您稍后决定B不需要继承A.如果您遵循Resharper的建议,您将不需要修改该行代码.


你也会遇到与实例方法相同的问题.通过所有这些逻辑,为什么继承任何东西?还是我错过了什么?
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有