gpt4 book ai didi

c# - 何时在 C# 中声明成员方法

转载 作者:行者123 更新时间:2023-11-30 20:49:18 25 4
gpt4 key购买 nike

这是我的情况:(这是 ASP.net MVC 5 的 Controller )

public class Class1
{
public Class1()
{
}

public void MethodA()
{
UserBLL bll = new UseBLL();
// some code that call method from bll
}

public void MethodB()
{
UserBLL bll = new UseBLL();
// some code that call method from bll
}
}

我使用了两次 UseBLL。 (可能再多十次)。所以我认为我应该像这样声明一个对象成员。

public class Class1
{
UserBLL bll;
public Class1()
{
bll = new UseBLL();
}

public void MethodA()
{

// some code that call method from bll
}

public void MethodB()
{
// some code that call method from bll
}
}

这是一个明智的决定吗?如果不是,为什么?

我是否应该将 UserBLL bll; 更改为 UserBLL bll {set;get };(当我需要这样做时?)

感谢大家的帮助:)

最佳答案

这取决于。 :)

你需要考虑的事情是:

  • 状态(UserBLL 是否保持状态,您是否希望保持状态?)
  • 线程安全(多个线程可以同时访问它并导致损坏吗?)
  • 创建成本如何?

但是,我在这里的典型方法是应用依赖倒置原则。这意味着 UserBLL 将实现一个接口(interface),并且在创建 Class1 的实例时,将提供一个实现 IUserBLL 的类并将其存储在 >构造函数的私有(private)只读字段。

例子:

public class Class1
{
private readonly IUserBLL _userBll;

public Class1(IUserBLL userBll)
{
// Null checks here...
_userBll = userBll;
}

public void Method()
{
_userBll.DoSomething();
}
}

你仍然需要考虑上面的前两点,但现在你有一个一致的方法,你不需要担心 _userBll 到底是什么,并且可以在不影响的情况下更改它Class1

通常,这种将对象注入(inject)构造函数的场景是使用 IoC 容器(有时称为“DI 容器”或“DI 框架”)实现的。

所以后续阅读:

  • 依赖倒置原则
  • 控制反转容器(例如:Ninject、CaSTLe.Windsor、StructureMap、Autofac)。

关于c# - 何时在 C# 中声明成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23824008/

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