Effective C# 原则19:选择定义和实现接口而不是继承
2009-02-19 08:16:41 来源:WEB开发网重用这些实现还有另一个好处:如果你在基类中添加一个方法,所有派生类会自动隐式的增加了这个方法。这就是说,基类提供了一个有效的方法,可以随时扩展几个(派生)类型的行为:就是向基类添加并实现方法,所有派生类会立即具有这些行为。而向一个接口添加一个方法,所会破坏所有原先实现了这个接口的类。这些类不会包含新的方法,而且再也通不过编译。所有的实现者都必须更新,要添加新的方法。
这两个模式可以混合并重用一些实现代码,同时还可以实现多个接口。System.Collections.CollectionBase就是这样的一个例子,它个类提供了一个基类。你可以用这个基类你的客户提供一些.Net缺少的安全集合。例如,它已经为你实现了几个接口:IList, ICollection,和IEnumerable。另外,它提供了一个受保护的方法,你可以重载它,从而为不同的使用情况提供自己定义的行为。IList接口包含向集合中添加新对象的Insert()方法。想自己更好的提供一个Insert方法的实现,你可以通过重载CollectionBase类的OnInsert()或OnInsertCcomplete()虚方法来处理这些事件:
public class IntList : System.Collections.CollectionBase
{
protected override void OnInsert( int index, object value )
{
try
{
int newValue = System.Convert.ToInt32( value );
Console.WriteLine( "Inserting {0} at position {1}",
index.ToString(), value.ToString());
Console.WriteLine( "List Contains {0} items",
this.List.Count.ToString());
}
catch( FormatException e )
{
throw new ArgumentException(
"Argument Type not an integer",
"value", e );
}
}
protected override void OnInsertComplete( int index,
object value )
{
Console.WriteLine( "Inserted {0} at position {1}",
index.ToString( ), value.ToString( ));
Console.WriteLine( "List Contains {0} items",
this.List.Count.ToString( ) );
}
}
public class MainProgram
{
public static void Main()
{
IntList l = new IntList();
IList il = l as IList;
il.Insert( 0,3 );
il.Insert( 0, "This is bad" );
}
}
- ››选择好的广告联盟:选择广告联盟理解掌握的六大绝招...
- ››选择谁? 揭秘90后必备的音乐播放器
- ››选择性关闭Win 7视频预览 节约系统资源
- ››选择适合的SRAM存储器的技巧
- ››Effective C# 原则40:根据需求选择集合
- ››Effective C# 原则41:选择DataSet而不是自定义的...
- ››Effective C# 原则42:使用特性进行简单的反射
- ››Effective C# 原则43:请勿滥用反射
- ››Effective C# 原则44:创建应用程序特定的异常类
- ››Effective C# 第6章:杂项
- ››Effective C# 原则45:选择强异常来保护程序
- ››Effective C# 原则47:选择安全的代码
更多精彩
赞助商链接