在java中在實例創建抽象方法,我們可以覆蓋或實現在實例創建抽象方法如下:覆蓋在C#
AbstractClass test =new AbstractClass()
{
public void AbstractMethod(string i) {
}
public void AbstractMethod2(string i) {
}
};
這是可能在C#中?如果是,什麼是等效代碼
感謝
在java中在實例創建抽象方法,我們可以覆蓋或實現在實例創建抽象方法如下:覆蓋在C#
AbstractClass test =new AbstractClass()
{
public void AbstractMethod(string i) {
}
public void AbstractMethod2(string i) {
}
};
這是可能在C#中?如果是,什麼是等效代碼
感謝
這個Java功能稱爲"anonymous class",而不是「關於創建實例方法的重寫」。在C#中沒有相同的功能。
C#採取了不同的路線 - 而不是提供創建子類的方便語法,它擴大在其委託功能,提供anonymous delegates和lambdas。 Lambdas讓你插入一段代碼。
不知道Java
,但這個「聞起來」像Anonymous Types在C#
。
例如,你可以寫這樣的:
var myNewType = new {
Name = "Charles",
Surname="Dickens",
Age = 55
};
可以實現通過巧妙地利用lambda表達式非常類似的東西:
public class BaseClass {
public BaseClass(Action<string> abs1 = null, Action<string> abs2 = null){
AbstractMethod1 = abs1 ?? s=>{};
AbstractMethod2 = abs2 ?? s=>{};
}
public Action<string> AbstractMethod1 {get; private set;}
public Action<string> AbstractMethod2 {get; private set;}
}
所以,你可以使用這個定義,像這樣:
new BaseClass(s=> Console.WriteLine(s), s=> Console.WriteLine(s));
您也可以將所有方法定義爲接口的一部分,然後用一個接口的具體實現構造一個類(代理調用具體實現) - 我會稱之爲「策略」模式。但這只是這個主題的變體。
不,與匿名類沒有多少共同之處 - 即使它們聽起來很相似。 – Voo