簡體   English   中英

代碼生成器可以使內聯抽象類滿足C#接口的Java匿名內部類的作用?

[英]Code generator to make inline abstract classes that fulfill the role of java anonymous inner classes for C# interfaces?

注意:我知道C#具有匿名類型和內部類型,但是它們扮演的角色與舊的Java匿名內部類明顯不同。

假設我有一個接口:

public interface Foo<T>
{
    int Fizz(string a);
    T Buzz(object o);
    void Crackle();
}

是否有東西(ReSharper宏等)可以讓我生成一個實現類,該類可以實現Java風格的AIC(即,讓我內聯定義功能)。

public class FooAIC<T> : Foo<T>
{
    public Func<string, int> Fizz;
    public Func<object, T> Buzz;
    public Action Crackle;

    int Foo<T>.Fizz(string a)
    {
        return Fizz(a);
    }

    T Foo<T>.Buzz(object o)
    {
        return Buzz(o);
    }

    void Foo<T>.Crackle()
    {
        Crackle();
    }
}

(我還沒有詳細的大量以為這通過。所以我想一個可以創建一個有只讀成員注射,空檢查上調用一個聰明類,適用於抽象類等,但這應該傳達什么樣的總體思路我想要實現)

有人知道什么可以做到嗎? 或者,除非如此,否則推薦使用最輕松的方法來觀察類似的事情-T4引擎有可能做到這一點嗎?

您的解決方案是可以的,通常在.NET中,您不需要匿名類,因為在大多數情況下,您只需要在它們上重寫/實現一個方法,因此您可以委派委托(我認為這是一個更好的選擇)。 但是,如果需要重寫/實現幾種方法,最好的方法是為每個方法創建一個帶有委托的存根類。 在WPF / Silverlight中,以這種方式實現ICommand,您將擁有一個DelegateCommand類,該類將接收一個用於實現bool CanExecute(對象參數)的Func和一個用於實現Execute(對象參數)的Action。 在代碼生成中最正確的方法是使用T4模板,在其中創建模板和參數(例如,一個字符串,該字符串指示要為其創建Delegateclass的類的類名,並使用反射來生成代碼)。

希望我有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM