WEB开发网
开发学院软件开发C语言 Effective C# 原则19:选择定义和实现接口而不是继... 阅读

Effective C# 原则19:选择定义和实现接口而不是继承

 2009-02-19 08:16:41 来源:WEB开发网   
核心提示: 重用这些实现还有另一个好处:如果你在基类中添加一个方法,所有派生类会自动隐式的增加了这个方法,Effective C# 原则19:选择定义和实现接口而不是继承(2),这就是说,基类提供了一个有效的方法,从而为不同的使用情况提供自己定义的行为,IList接口包含向集合中添加新对象的Inser

重用这些实现还有另一个好处:如果你在基类中添加一个方法,所有派生类会自动隐式的增加了这个方法。这就是说,基类提供了一个有效的方法,可以随时扩展几个(派生)类型的行为:就是向基类添加并实现方法,所有派生类会立即具有这些行为。而向一个接口添加一个方法,所会破坏所有原先实现了这个接口的类。这些类不会包含新的方法,而且再也通不过编译。所有的实现者都必须更新,要添加新的方法。

这两个模式可以混合并重用一些实现代码,同时还可以实现多个接口。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" );
 }
}

上一页  1 2 3 4 5  下一页

Tags:Effective 原则 选择

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接