我有一些代理的繼承問題。代理據我所知是一對指針:一個實例和一個方法,事情是這是在創建委託時引用的方法,而不受繼承的影響。所以,這是行不通的:在c中的代表和繼承#
public class BaseObject {
public delegate void del();
public BaseObject() {
next=Method;
}
public del next;
public void ExecuteNext() {
next();
}
public virtual void Method() {
Debug.Log("BASE");
}
}
public class InheritedObject:BaseObject {
override public void Method() {
Debug.Log("INHERITED");
}
}
...
(new InheritedObject()).ExecuteNext();
執行運行基礎方法(),我希望它運行繼承的方法()。我已經發現了一些辦法解決,但效率不高,分散注意力,非常容易出錯,反正這裏的,我想擺脫目前的工作版本:
class BaseObject {
public delegate void del();
BaseObject() {
next=DoMethod; /// using DoMethod here
}
public del next;
public void ExecuteNext() {
next();
}
public void DoMethod() { /// using DoMethod here
Method();
}
public virtual void Method() {
// do base
}
}
class InheritedObject:BaseObject {
override public void Method() {
// do inherited
}
}
...
(new InheritedObject()).Execute();
這DoMethod的形式給出的作品,但問題也不少,
- 大量的無用的代碼
- 容易出錯在使用該類時 - 容易犯的錯誤obj.next =
DoMethod
與obj.next =繼承的類時Method
- 容易出錯 - 我要記住不繼承DoMethod,以及大量的虛擬和覆蓋。
任何建議我該如何做得更好?也許一些註釋魔術本身就是DoMethod
?我已經想到詞典 - 他們不擅長在這裏,他們補充混亂甚至是另一個級別(單聲道,.NET 2,Unity3d框架)
你可以用這種方法背後的原因開始。爲什麼你需要委託人? –
'(new InheritedObject())。Method();'工作。正如丹尼爾所說,爲什麼「代表」? – dlev
這只是一個最小的代碼示例,在實際使用中,這個構造是一個角色遊戲邏輯的多級繼承狀態機。 –