我需要两个略有不同的类,它们具有相同的成员,但其中一个类需要用户具有较少的交互可能性。我希望从第一节开始继承第二节课 有没有办法限制从子类访问父方法,所以如果有人创建子对象,他们将无法访问某些父类方法(在父类中是公共的)?
答案 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
有:SharedProperty
,SharedMethod
和Method1
。
MyClass2
有:SharedProperty
,SharedMethod
和Method2
。
答案 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)
创建基类,并使应隐藏的方法受到保护。
创建一个声明您想要公开的方法的界面
创建一个继承自基类的子类,并显式实现该接口。从接口实现方法中调用受保护的方法。
然后子类的用户只能看到接口的成员(这需要他们将实例强制转换为接口)