大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > 使用接口还是使用抽象类?

使用接口还是使用抽象类?

关键词:接口抽象类原创  阅读(668) 赞(16)

[摘要]在使用C#的时候,经常会用到集合,惯用的做法是实例化一个List或Collection,然后存放东西就行了。我总是很懒,所以把Collection封装了一下,加了个锁,可以线程安全的访问了。

在使用C#的时候,经常会用到集合,惯用的做法是实例化一个List或Collection,然后存放东西就行了。我总是很懒,所以把Collection封装了一下,加了个锁,可以线程安全的访问了。

这位看官说了:你说的是集合,跟你的标题扯不上关系吧?

是的,到目前为止是的。然而,当我们遇到这样的问题时:N多个类有相同的属性或方法。这个时候你第一想到的是接口。没错,接口可以很好的表述你的要求。但我要说,请稍等。

你可以使用接口,那么为什么不试试抽象类呢?

定义一个接口,其所有的属性与方法,你都要在实现类中全部重现。

使用抽象类,在抽象基类里可以实现一些属性或方法,子类只需要重载特殊的属性或方法即可。

不管从实用性还是代码简洁性,抽象类,在我看来是首选。

这也是我不同意下面一个帖子里使用接口的原因。

C# 泛型类型必须继承接口的问题

好了,下面放一个我自己写的泛型抽象基类,其使用方法见

原创 C# 正则表达式 读写 Ini 文件

namespacegoldli.Utility.Library
{
///<summary>
///泛型集合类,子元素拥有默认new构造函数
///</summary>
///<typeparamname="T"></typeparam>
publicabstractclassCollection<T>:CollectionBase//whereT:class,new()
{
///<summary>
///泛型是否默认值
///对泛型实例与默认值比较使用Equals
///</summary>
///<paramname="item"></param>
///<returns></returns>
publicboolIsDefault(Titem)
{
returnEquals(item,default(T));
}
 
///<summary>
///添加,item可以为null,方便大量添加后赋值
///</summary>
///<paramname="item"></param>
publicvoidAdd(Titem)
{
Lock();
try
{
List.Add(item);
Selected=item;//同时选中
}
finally
{
UnLock();
}
}
 
///<summary>
///删除
///</summary>
///<paramname="item"></param>
publicvoidRemove(Titem)
{
vartmp=Find(item);
if(IsDefault(tmp))thrownewArgumentNullException("type"+typeof(T).Name+"isnull.");
Lock();
try
{
List.Remove(tmp);
}
finally
{
UnLock();
}
}
 
publicTthis[intindex]
{
get
{
Lock();
Tresult;
try
{
result=(0<=index)&&(index<Count)?(T)InnerList[index]:default(T);
}
finally
{
UnLock();
}
returnresult;
}
}
 
///<summary>
///查找
///</summary>
///<paramname="value"></param>
///<returns></returns>
publicabstractTFind(objectvalue);
 
///<summary>
///选择的某个item
///</summary>
publicTSelected{get;set;}
 
#region线程安全
 
///<summary>
///上锁
///</summary>
publicvoidLock()
{
Monitor.Enter(List);
}
 
///<summary>
///解锁
///</summary>
publicvoidUnLock()
{
Monitor.Exit(List);
}
 
#endregion
 
///<summary>
///公开IList
///</summary>
publicnewIListList{get{returnbase.List;}}
}
}


相关评论