静态方法,抽象方法,接口方法比较?

时间:2010-04-15 06:56:25

标签: c# .net visual-studio c#-3.0

当我选择这些方法时?我无法决定我必须选择哪一个,或者何时使用其中一个?哪一个表现最佳?

第一类型用法

public abstract class _AccessorForSQL
{
   public virtual bool Save(string sp, ListDictionary ld, CommandType cmdType);
   public virtual bool Update();
   public virtual bool Delete();
   public virtual DataSet Select();
}

class GenAccessor : _AccessorForSQL
{
    DataSet ds;
    DataTable dt;
    public override bool Save(string sp, ListDictionary ld, CommandType cmdType)
    {
    }

    public override bool Update()
    {
        return true;
    }

    public override bool Delete()
    {
        return true;
    }

    public override DataSet Select()
    {
        DataSet dst = new DataSet();
        return dst;
    }
}

第二类型用法

我也可以在代码下面写一下:

public class GenAccessor
{
     public Static bool Save()
     { 
     }

     public Static bool Update()
     {
     }

     public Static bool Delete()
     {
     }
}

第三类型用法

我也可以在代码下面写一下:

public interface IAccessorForSQL
{
    bool Delete();
    bool Save(string sp, ListDictionary ld, CommandType cmdType);
    DataSet Select();
    bool Update();
}

public class _AccessorForSQL : IAccessorForSQL
{
    private DataSet ds;
    private DataTable dt;

    public virtual bool Save(string sp, ListDictionary ld, CommandType cmdType)
    {            
    }
}

我可以使用以下第一个用法:

GenAccessor gen = New GenAccessor();
gen.Save();

我可以使用以下第二个用法:

GenAccessor.Save();

您更喜欢哪一个?我什么时候使用它们?哪个时候我需要覆盖方法?哪个时候我需要静态方法?

1 个答案:

答案 0 :(得分:3)

静态方法适用于独立于对象状态的方法。通常我会将它们用于实用方法和纯数学类型的函数。例如computeAverage(int [] values);

抽象/接口方法几乎是一回事。界面方法有纯合约的感觉。抽象方法更容忍版本。如果你有合同并且可能有不同的实现,我会选择这些。

静态方法性能更高,因为它们不需要进行虚拟表查找。