c# - 静态方法、抽象方法、接口(interface)方法比较?

标签 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();

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

最佳答案

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

抽象/接口(interface)方法几乎是一回事。接口(interface)方法有纯粹契约的感觉。抽象方法具有更高的版本容错性。如果您有契约(Contract)并且它可能有不同的实现,我会选择这些。

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

关于c# - 静态方法、抽象方法、接口(interface)方法比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643272/

相关文章:

c# - 无法从 double[][] 转换为 double[*,*]

c# - 在当前上下文中不存在 c#

c# - 英文异常信息?

c# - 如何通过代码隐藏将AutoGeneratedColumn header 包装在TextBlock中?

c - 错误 C2036 : 'void *' : unknown size

c# - 如何在 C# 应用程序中使用 C++ 库?

c# - 数据表中的复数

c# - 从Wav文件中删除秒的前.5

.net - 在 XP 中安装 .Net 4 之前的 VS 2010 BootStrapper for WIC(Windows Imaging Component)

visual-studio - VsVim键盘快捷键可以在文件/标签之间切换?