c# - 基类还是普通类?

标签 c# asp.net .net asp.net-4.0

对于我们的 asp.net web 应用程序 v 4.0,我们正在定义一个包含应用程序通用方法的类。为实现这一目标,我们团队中有 2 个建议。一个是创建一个基类,在其中定义方法并从该基类派生所有其他类。另一个是创建一个单独的类(不是基类) 并在需要访问通用方法时在其他类中实例化该通用类。请指导我确定最佳方法..

最佳答案

如果基类和派生类之间存在真正的is-a 关系,我只会走基类路线。一个原因是一个类只能继承自一个基类。我会以明智的方式使用这种关系。只是共享一些辅助方法不是值得阻止这种关系的场景。

如果您想在多个类中使用一些辅助方法,组合 是您在第二种方法中描述的更好的方法。与其在类中创建对象,不如考虑是否可以将实例注入(inject)到类中(有关依赖注入(inject)的详细信息,请参阅 link),例如:

public class HelperClass
{
    public virtual void HelperMethod()
    { 
        // ...
    }
}

public class ClassThatUsesHelper
{
    private readonly HelperClass _helper;

    public ClassThatUsesHelper(HelperClass helper)
    {
        _helper = helper;
    }

    public void DoSomething()
    {
        _helper.HelperMethod();
    }
}

通过注入(inject)辅助类,您可以解耦这些类,这样您就可以用共享相同接口(interface)的不同实现替换辅助类。 ClassThatUsesHelper 适用于派生自 HelperClass(当然是 HelperClass 本身)的任何类。所以如果你需要装饰辅助方法或者在某些情况下需要特殊的实现,这是可以毫无问题的。

使用组合还可以让您单独测试辅助方法。

但是,如果它是关于非常基本的辅助方法,您可能还会考虑使用带有静态辅助方法的静态类。请注意,您在类之间引入了强依赖性,并且您无法轻易调整实现。

public static class HelperClass
{
    public static void HelperMethod()
    { 
        // ...
    }
}

public class ClassThatUsesHelper
{
    public void DoSomething()
    {
        HelperClass.HelperMethod();
    }
}

关于c# - 基类还是普通类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22506514/

相关文章:

c# - Read() 阻塞问题

c# - VS2010 Framework 3.5 中的 Web 服务中的方法在本地运行时未显示

.net - 如何避免成千上万的不必要的ListView.SelectedIndexChanged事件?

c# - 如何创建winform登录对话框并保持循环

c# - 如何捕获 Windows 窗体组合框中的回车键

c# - 将更改重新部署到 IIS

c# - 在通用 Windows 平台中更改按钮样式

c# - IIS7 不通过 Process Start 启动我的 Exe 文件,但它在任务栏中运行

C# Dropdownlist OnSelectedIndexChanged 未触发

c# - 横向扩展WCF,如何处理回调?