簡體   English   中英

C#:Child類可以限制對Parent類方法的訪問嗎?

[英]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具有: SharedPropertySharedMethodMethod1

MyClass2具有: SharedPropertySharedMethodMethod2

不完全是,沒有。 你可能最接近的是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM