3

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

4

4 回答 4

7

不,原因如下:

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
于 2012-06-12T01:46:25.847 回答
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

于 2012-06-12T01:43:33.053 回答
2

不完全是,不。最接近的方法是在基(父)类中提供虚拟方法并在派生(子)类中覆盖/新方法,并且不提供任何行为或适当的异常;

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

public class Derived : Base
{
    public override void DoSomething()
    { 
        throw new NotSupportedException("Method not valid for Derived");
    }
}
于 2012-06-12T01:44:13.473 回答
0

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

创建一个接口,声明您想要公开的方法

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

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

于 2012-06-12T01:49:24.457 回答