亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

強制實例實現一個方法

強制實例實現一個方法

C#
精慕HU 2021-11-07 19:43:28
可以強制派生類實現特定功能?,F在,是否可以對類的每個實例分別執行相同的操作?(可能是在調用像 Java 即時覆蓋這樣的構造函數時)// on-the-fly override sample @JavaprogressBar.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {    }});ps:只有一個類我想為它創建一個實例。在這種情況下沒有子類。
查看完整描述

2 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

實例不能實現接口,只有類可以。同樣在Java中這是不可能的。取而代之的是,在后面創建了一個從您的基類派生的匿名類,它顯示為您的基類的實例。


要在 C# 中實現類似的功能,您可以使用委托并在類的構造函數中提供它:


class MyClass

{

    Action<T> TheAction { get; private set; }

    public MyClass(Action<T> doSomething() { this.TheAction = doSomething; }

}

現在您可以為每個實例提供不同的行為:


var i1 = new MyClass(x => Console.WriteLine(x));

var i2 = new MyClass(x => DoSomething(x));

但是我不明白為什么你甚至需要這個。要為進度條啟用點擊事件,只需執行以下操作:


myProgressBar.Click += (sender, args) => { /* what ever */ };

或者:


myProgressBar.Click += MyMethod;


MyMethod(object sender, EventArgs args) { /* what ever */ }


查看完整回答
反對 回復 2021-11-07
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

Interfaces可用于要求所有派生對象實現其方法(請參閱this)。不過,從這個聲音來看,base.Method()更多的是你正在尋找的東西(見這個):


internal class A {

    public virtual void DoSomething() { }

}

internal class B : A {

    public override void DoSomething() { base.DoSomething(); }

}

以上對于確保在調用A.DoSomething時執行其中的代碼很有用B.DoSomething。


使用 aninterface是我所知道的強制派生對象實現方法的唯一方法。


查看完整回答
反對 回復 2021-11-07
  • 2 回答
  • 0 關注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號