Zar*_*_me 9 c# inheritance design-patterns
我刚刚在msdn/books中读到,如果现有的类源代码不可用,扩展方法对于向现有类添加方法很有用,但是我注意到在一些非常好的书面开源代码中,扩展方法仍然与继承一起使用(抽象,接口)在具有由作者自己编写的源代码的类上.
这只是一般性问题,这里没有源代码.
在 C# 中,为接口提供扩展方法通常是尝试近似* mixins。
mixin 也可以被视为具有已实现方法的接口。
尽管 C# 不支持 mixin,但为其他人可以实现的接口类提供扩展方法是“附加”功能的好方法。
下面是一个简单界面的真实示例,该界面具有作为 mixin 提供的附加功能:
public interface IRandomNumberGenerator
{
Int32 NextInt();
}
public static class RandomNumberGeneratorExtensions
{
public static Double NextDouble(this IRandomNumberGenerator instance)
{
return (Double)Int32.MaxValue / (Double)instance.NextInt();
}
}
// Now any class which implements IRandomNumberGenerator will get the NextDouble() method for free...
Run Code Online (Sandbox Code Playgroud)
* C# 的 mixin 近似值与实际情况之间的最大区别在于,在受支持的语言中 mixins 可以包含私有状态,而 C# 中接口上的扩展方法显然只能访问公共状态。