我是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
}
}
}
答案 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类并提供适当的分离。