[英]C# use base class methods in selected derived classes only
我有一些只能由某些派生類使用的通用函數。 為了只對每個函數編碼一次,我使用了一個基類。 我需要將函數定義為protected 以將它們隱藏在不使用它們的派生類中,因此無法使用virtual 和override,導致在這種情況下無法更改保護級別。 這是我的代碼。 這按照我想要的方式工作,但是 ios 沒有更好的方法來做到這一點?
class Base
{
protected void Initialize()
{
}
protected void doTask1()
{
}
protected void doTask2()
{
}
}
class Derived1 : Base
{
public void Initialize()
{
base.Initialize();
}
public new void doTask1()
{
base.doTask1();
}
}
class Derived2 : Base
{
public void Initialize()
{
base.Initialize();
}
public new void doTask2()
{
base.doTask2();
}
}
歡迎任何幫助......
doTask1() 應該只在 Derived1 類中可用,doTask2() 只在 Derived2 類中可用。 感謝@Fildor 的回答,我使用接口解決了這個問題。 所有派生類都派生自同一個基類。 基類實現接口中的所有功能。
public class Base : I_Derived1, I_Derived2
{
// implementations of all methods ...
doTask1()
{ // ...
}
doTask2()
{ // ...
}
initialize()
{ // ...
}
{
public interface I_Derived1
{
doTask1();
initialize();
}
public interface I_Derived2
{
doTask2();
initialize();
}
class Derived1 : Base
{
}
class Derived2 : Base
{
}
// then the interfaces are used ...
I_Derived1 d1 = new Base();
I_Derived2 d2 = new Base();
d1.doTask1();
d2.initialize();
d2.doTask2();
// ...
這解決了我的問題,謝謝。 在我的實際項目中,一些類 Base 函數被 10 個或更多派生類使用,一些被全部使用,有些只被 2 或 3 個使用。使用對它有意義的函數。
我認為在這里只使用接口會更好:
public interface IInit{
void Initialize();
}
public interface I1: IInit {
void DoTask1();
}
public interface I2: IInit {
void DoTask2();
}
public class Impl: I1, I2
{
public void Initialize() { /*...*/ }
public void DoTask1(){ /*...*/ }
public void DoTask2(){ /*...*/ }
}
用法:
Impl obj = new Impl();
obj.Initialize();
obj.DoTask1(); // both
obj.DoTask2(); // visible
I1 obj1 = new Impl();
obj1.Initialize();
obj1.DoTask1();
// obj1.DoTask2(); < not visible
I2 obj2 = new Impl();
obj2.Initialize();
// obj2.DoTask1(); < not visible
obj2.DoTask2();
您甚至可以通過顯式接口實現更進一步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.