2 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
實(shí)例不能實(shí)現(xiàn)接口,只有類可以。同樣在Java中這是不可能的。取而代之的是,在后面創(chuàng)建了一個(gè)從您的基類派生的匿名類,它顯示為您的基類的實(shí)例。
要在 C# 中實(shí)現(xiàn)類似的功能,您可以使用委托并在類的構(gòu)造函數(shù)中提供它:
class MyClass
{
Action<T> TheAction { get; private set; }
public MyClass(Action<T> doSomething() { this.TheAction = doSomething; }
}
現(xiàn)在您可以為每個(gè)實(shí)例提供不同的行為:
var i1 = new MyClass(x => Console.WriteLine(x));
var i2 = new MyClass(x => DoSomething(x));
但是我不明白為什么你甚至需要這個(gè)。要為進(jìn)度條啟用點(diǎn)擊事件,只需執(zhí)行以下操作:
myProgressBar.Click += (sender, args) => { /* what ever */ };
或者:
myProgressBar.Click += MyMethod;
和
MyMethod(object sender, EventArgs args) { /* what ever */ }

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
Interfaces可用于要求所有派生對象實(shí)現(xiàn)其方法(請參閱this)。不過,從這個(gè)聲音來看,base.Method()更多的是你正在尋找的東西(見這個(gè)):
internal class A {
public virtual void DoSomething() { }
}
internal class B : A {
public override void DoSomething() { base.DoSomething(); }
}
以上對于確保在調(diào)用A.DoSomething時(shí)執(zhí)行其中的代碼很有用B.DoSomething。
使用 aninterface是我所知道的強(qiáng)制派生對象實(shí)現(xiàn)方法的唯一方法。
- 2 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)