0

注意:我知道 C# 有匿名类型和内部类型,但它们的作用与旧的 java 匿名内部类截然不同。

假设我有一个接口:

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

那里有什么东西(ReSharper 宏等)可以让我生成一个实现类,该类将履行 java 样式 AIC 的角色(即,允许我定义内联功能)。IE

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 引擎中是否可行?

4

1 回答 1

1

您的解决方案没问题,通常在 .NET 中您不需要匿名类,因为大多数情况下您只需在它们上覆盖/实现一个方法,并且为此您有委托(我认为这是一个更好的选择)。但是,如果您需要覆盖/实现多个方法,则为每个方法创建一个带有委托的存根类是最好的方法。在 WPF/Silverlight ICommand 中以这种方式实现,你有一个 DelegateCommand 类,它接收一个 Func 来实现 bool CanExecute(object parameter) 和一个 Action 来实现 Execute(object parameter)。在代码生成中最正确的方法是使用 T4 模板,在其中创建一个模板和一个参数(例如,一个指示要为其创建 Delegateclass 的类的类名的字符串,并使用反射来生成代码)。

希望我有所帮助

于 2010-11-08T09:50:00.980 回答