在Java中抽象類,我能夠有這樣一類:C#初始化像Java
public abstract class Button{
public abstract void onClick();
}
然後初始化它使用:
Button b = new Button(){
@Override
public void onClick(){
// Things
}
}
現在有沒有辦法做一個類似的東西在C#中?
或者我最好是使用事件?
在Java中抽象類,我能夠有這樣一類:C#初始化像Java
public abstract class Button{
public abstract void onClick();
}
然後初始化它使用:
Button b = new Button(){
@Override
public void onClick(){
// Things
}
}
現在有沒有辦法做一個類似的東西在C#中?
或者我最好是使用事件?
只爲其他人試圖做類似的事情。 @shmosel建議lambdas,所以這就是我使用的。
public class Button(){
private Action _onClick;
public Button(Action onClick){
_onClick = onClick;
}
//Other method that calls _onClick()
}
//Other Class
Button b = new Button(() => {/*Do Code Here*/});
如果你想使用抽象類,你需要有從抽象類繼承另一個類,並用它來初始化抽象類是這樣的:
public class MeSecondClass : MyClass
{
public override void OnClick(object sender, EventArgs args)
{
throw new NotImplementedException();
}
}
public abstract class MyClass
{
public abstract void OnClick(object sender, EventArgs args);
}
MyClass a = new MeSecondClass();
這是比使用委託更好的方法,因爲它可以處理可能涉及多個方法的一般情況。 –
至於其他的答案顯示,你可以做類似的事情,但真正的問題是'你應該嗎?'答案是否定的。
事件是爲這種事情創建的,所以使用事件。它不僅更清晰,更乾淨的代碼,而且它是C#開發人員都知道的一個非常成熟的模式,所以使用它可以幫助代碼的可維護性。
我不知道有關C#語法問題的答案。但我認爲我們不能回答有關事件的問題。具有'onClick'方法的抽象類的原因將是因爲有像Swing或Android運行時這樣的平臺期望使用定義了'onClick'的類。你在C#中使用類似的平臺嗎?或者你在編寫自己的平臺? – ajb
C#沒有相當於匿名類。但是,您可以使用委託和lambdas類似的效果。 – shmosel
我使用我自己的平臺,所以我不需要它是一個onClick方法。這只是在Java中,我會使用類似於我上面發佈的內容,因爲在C#中我不確定什麼是最好的方式來做到這一點。 – Bimmr