gpt4 book ai didi

c# - 基类还是普通类?

转载 作者:行者123 更新时间:2023-11-30 14:56:34 25 4
gpt4 key购买 nike

对于我们的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com