[英]Is there a syntax for creating an anonymous subclass in C#?
我可以像在Java中一樣在C#/ .net中創建抽象類的實例嗎?
附加信息
我想我們很多人都不懂我的意思? 所以,在java中,我可以像這樣創建抽象類:
簡單的抽象類:
/**
* @author jitm
* @version 0.1
*/
public abstract class TestAbstract
{
public abstract void toDoSmth();
}
代碼我在哪里創建抽象類的實例
/**
* @author jitm
* @version 0.1
*/
public class Main {
public static void main(String[] args) {
TestAbstract testAbstract = new TestAbstract() {
@Override
public void toDoSmth() {
System.out.println("Call method toDoSmth");
}
};
}
}
我可以用c#做這樣的事嗎?
無論是在Java還是在C#中,您都可以創建抽象類的實例。 您將始終需要創建一個繼承自抽象類的具體類。 Java允許您在不使用匿名類命名類的情況下執行此操作。 C#沒有給你這個選項。
(編輯顯示代表作為替代。我在這里沒有訪問VS,所以它可能無法編譯,但這是個主意)
通常在Java中使用帶有單個抽象方法(SAM)的抽象類時,您真正想要實現的是將一些代碼作為參數傳遞。 假設您需要根據類名對對象數組進行排序,使用Collections.sort(Collection,Comparator)(我知道Comparator是一個接口,但它是相同的想法)使用匿名類來避免額外的輸入,你可以寫類似的東西
Comparator<Object> comparator = new Comparator<Object>{
@Override
public int compare(Object o1, Objecto2) {
return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName()));
}//I'm not checking for null for simplicity
}
Collections.sort(list, comparator)
在C#2.0及更高版本中,您可以使用Comparison<T>
委托執行相同的操作。 委托可以被認為是一個函數對象,或者在java單詞中,可以被認為是一個具有單個方法的類。 您甚至不需要創建類,只需要使用關鍵字delegate的方法。
Comparison<Object> comparison = delegate(Object o1, Object o2)
{
return o1.class.Name.CompareTo(o2.class.Name);
};
list.sort(comparison);
在C#3.0及更高版本中,您可以使用lambdas和類型推斷編寫更少的代碼:
list.sort((o1, o2) => o1.class.Name.CompareTo(o2.class.Name))
無論如何,如果您要將代碼從java遷移到c#,您應該閱讀有關委托的內容......在許多情況下,您將使用委托而不是匿名類。 在您的情況下,您使用的方法void toDoSmth()。 有一個名為Action的委托,它幾乎是一回事,一個沒有參數且沒有返回的方法。
不,不是直接的。 你最接近(假設你有以下類結構):
public abstract class AbstractClass
{
}
public class ChildClass : AbstractClass
{
}
方法是:
AbstractClass instance = new ChildClass();
在這種情況下,C#與Java相同,您無法實例化抽象類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.