c#在派生类之外使用公共静态属性

时间:2014-05-05 17:38:43

标签: c# inheritance

我是C#的初学者。我想做以下事情:

在命名空间nA中使用类A我需要在命名空间nB中实现类B,它继承了A中的所有内容并添加了一些功能,这很好。

在ProjectA中我有:

namespace nA{
    public abstract class A{
        public const int a = 1;
    }
}
在ProjectB中的

我有:

using ProjectA.nA;
namespace nB{
    class abstract B : A{
        public const int b = 2; 
    }
}

在ProjectC中我有

using ProjectB.nB;
namespace nC{
    class C{
        void someMethod(){
            int valueA = B.a //error, nB.B does not contain a definition for 'a'
            int valueB = B.b //works just fine
        }
    }
}

3 个答案:

答案 0 :(得分:2)

既然它应该有效,我建议你检查一下你的项目中没有遗漏任何装配参考。

答案 1 :(得分:1)

始终通过实际定义主题的类访问常量和静态成员。 A.a会奏效。另请注意,可以从任何类访问它,而不仅仅是继承者。

答案 2 :(得分:0)

在项目B中写道:

using ProjectA.nA;
namespace nB{
    class abstract B : A{
        public const int a = A.a; 
        public const int b = 2; 
    }
}

然后项目C应该编译。或者可以这样做:

using ProjectB.nB;
namespace nC{
    class C{
        void someMethod(){
            int valueA = ProjectA.nA.a;
            int valueB = B.b;
        }
    }
}

由于ProjectC必须引用ProjectA。

这里更好的教训是从关注点分离的角度思考问题。如果C类不应该直接知道A类,那么它现在也不应该是A类定义的常量。相反,B中应该有一些功能,它使用常量并且对B类试图完成的内容有意义。因此,B类关注的是使用A类并提供适当的分离。