我需要两个稍微不同的类,它们具有相同的成员,但其中一个类需要用户较少的交互可能性。我希望从第一类继承第二类。
有没有办法限制子类对父方法的访问,这样如果有人创建了子对象,他们将无法访问某些父类方法(在父类中是公共的)?
问问题
3900 次
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
有:SharedProperty
、SharedMethod
和Method1
。
MyClass2
有:SharedProperty
、SharedMethod
和Method2
。
于 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 回答