我有一个标记为抽象的基类。是否有可能使该基类中的方法仅对继承基类的其他类可见?C# - 如何使方法只对继承方法的基类的类可见
说我有Class1,这是我的基类,并被标记为抽象。 Class2继承Class1并可以调用它的所有公共方法。我希望Class3创建Class2的实例,但无法调用Class1的某些方法。我试图将这些方法标记为抽象,但是当Class2尝试使用它们时出现错误。错误是:
我有一个标记为抽象的基类。是否有可能使该基类中的方法仅对继承基类的其他类可见?C# - 如何使方法只对继承方法的基类的类可见
说我有Class1,这是我的基类,并被标记为抽象。 Class2继承Class1并可以调用它的所有公共方法。我希望Class3创建Class2的实例,但无法调用Class1的某些方法。我试图将这些方法标记为抽象,但是当Class2尝试使用它们时出现错误。错误是:
public abstract class Class1
{
protected abstract void Method1();
public abstract void Method2();
}
public class Class2 : Class1
{
protected override void Method1()
{
//Class3 cannot call this.
}
public override void Method2()
{
//class 3 can call this.
}
}
public class Class3
{
public void Method()
{
Class2 c2 = new Class2();
c2.Method1(); //Won't work
c2.Method2(); //will work
}
}
为什么不申报方法protected
“因为它被标记为抽象的...不能声明主体”?
这听起来像你正在寻找protected
关键字。这限制标记为protected
的成员仅用于从该类型派生的声明类型。
abstract class Class1 {
protected void Method1() {
...
}
}
class Class2 : Class1 {
public void Method2() {
Method1(); // Legal
}
}
class Class3 {
public void Example() {
Class2 local = new Class2();
local.Method2(); // Legal
local.Method1(); // Illegal since Method1 is protected
}
}
您需要在Class1和Class2中将它们标记为protected
。此访问修饰符允许派生类访问成员,但派生类以外的任何内容都不能看到它。
使用protected
关键字。
我想你想要一个protected abstract
方法/财产/领域。不过,您必须使用Class 2中的override
关键字来实现它。这使Class2可以访问该字段(如果您真的想要它是抽象的),但不会给出任何不能从Class1访问这些字段继承的类。
这是override
会让你围绕Cannot declare a body...
消息。
正是我在找的东西。我忘了保护!谢谢 – PICyourBrain 2010-11-16 17:05:20