C#:Child类可以限制对Parent类方法的访问吗?

时间:2012-06-12 01:39:19

标签: c# inheritance

我需要两个略有不同的类,它们具有相同的成员,但其中一个类需要用户具有较少的交互可能性。我希望从第一节开始继承第二节课 有没有办法限制从子类访问父方法,所以如果有人创建子对象,他们将无法访问某些父类方法(在父类中是公共的)?

4 个答案:

答案 0 :(得分:6)

你应该有一个基本抽象类来保存两个类的共同点,然后让其他两个类继承它并添加方法和属性等。

abstract class MyBaseClass
{
    public int SharedProperty { get; set; }

    public void SharedMethod()
    {
    }
}

class MyClass1 : MyBaseClass
{
    public void Method1()
    {
    }
}

class MyClass2 : MyBaseClass
{
    public void Method2()
    {
    }
}

MyClass1有:SharedPropertySharedMethodMethod1

MyClass2有:SharedPropertySharedMethodMethod2

答案 1 :(得分:6)

不,这就是原因:

class Animal { 
   public void Speak() { Console.WriteLine("..."); }
}

class Dog : Animal { 
   remove void Speak();  // pretend you can do this
}

Animal a = GetAnAnimal(); // who knows what this does

a.Speak();  // It's not known at compile time whether this is a Dog or not

答案 2 :(得分:2)

不完全没有。你最接近的可能是在base(parent)类中提供虚方法并覆盖/ new在derived(child)类中的方法,并且不提供任何行为或异常;

public class Base
{
    public virtual void DoSomething()
    { . . . }
}

public class Derived : Base
{
    public override void DoSomething()
    { 
        throw new NotSupportedException("Method not valid for Derived");
    }
}

答案 3 :(得分:0)

创建基类,并使应隐藏的方法受到保护。

创建一个声明您想要公开的方法的界面

创建一个继承自基类的子类,并显式实现该接口。从接口实现方法中调用受保护的方法。

然后子类的用户只能看到接口的成员(这需要他们将实例强制转换为接口)