[英]C#: Can a Child class restrict access to Parent class methods?
我需要兩個略有不同的類,它們具有相同的成員,但其中一個類需要用戶具有較少的交互可能性。 我希望從第一個繼承第二個類。
有沒有辦法限制從子類訪問父方法,所以如果有人創建子對象,他們將無法訪問某些父類方法(在父類中是公共的)?
不,這就是原因:
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
你應該有一個基本抽象類來保存兩個類的共同點,然后讓其他兩個類繼承它並添加方法和屬性等。
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
。
不完全是,沒有。 你可能最接近的是在base(parent)類中提供虛方法,並在derived(child)類中覆蓋/ new,並且不提供任何行為或異常;
public class Base
{
public virtual void DoSomething()
{ . . . }
}
public class Derived : Base
{
public override void DoSomething()
{
throw new NotSupportedException("Method not valid for Derived");
}
}
創建基類,並使應隱藏的方法受到保護。
創建一個聲明要公開的方法的接口
創建一個繼承自基類的子類,並顯式實現該接口。 從接口實現方法中調用受保護的方法。
然后子類的用戶只能看到接口的成員(這需要他們將實例強制轉換為接口)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.