Interface-implementing anonymous class in C#?
本问题已经有最佳答案,请猛点这里访问。
C中有一个构造,允许你创建一个匿名类,实现一个接口,就像在Java中一样?
如前所述,不,这是不可能的。但是,您可以创建一个实现所需接口并在其构造函数中接受lambda的类,以便将lambda转换为实现接口的类。例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class LambdaComparer<T> : IEqualityComparer<T> { private readonly Func<T, T, bool> _lambdaComparer; private readonly Func<T, int> _lambdaHash; public LambdaComparer(Func<T, T, bool> lambdaComparer) : this(lambdaComparer, EqualityComparer<T>.Default.GetHashCode) { } public LambdaComparer(Func<T, T, bool> lambdaComparer, Func<T, int> lambdaHash) { if (lambdaComparer == null) throw new ArgumentNullException("lambdaComparer"); if (lambdaHash == null) throw new ArgumentNullException("lambdaHash"); _lambdaComparer = lambdaComparer; _lambdaHash = lambdaHash; } public bool Equals(T x, T y) { return _lambdaComparer(x, y); } public int GetHashCode(T obj) { return _lambdaHash(obj); } } |
用法(显然没有任何帮助,但你明白了)
1 2 |
号
不。C不支持匿名类(不能定义方法的匿名类型除外)。
不,lambda表达式不能实现任何其他接口,因为它已经实现了。
你也在比较错误的事情。我猜你是想问C中的匿名类型是否可以实现接口。答案也是否定的。