C#让多个类共享另一个类的同一个实例

标签 c# class instance

有没有办法让多个类共享另一个类的同一个实例? 所以在我的 c# 程序中,我有三个类 Gamelogic(A)、FPSController(B) 和 SpawnPlayer(C)。

在我的例子中,B 类和 C 类将使用和更改 A 中的一些变量,以便使用我当前在两个不同类中实例化 A 的变量,然后使用点符号从 A 的实例访问变量,但问题是A在不同类中实例化后,instance.variable的变化根本不在B类和C类之间共享。

静态类型是解决这个问题的好方法吗?或者写一个 main 会更好。

如有任何建议,我们将不胜感激。

最佳答案

有几种方法。这是一个:

一种方法是依赖注入(inject)。 您可以将 A 的实例传递给 B 和 C 的构造函数(或传递给 B 和 C 的 setter /属性):

A a = new A();
B b = new B(a);
C c = new C(a);

但这不允许您轻松更改两个对象中的 A 引用,这似乎是您的问题。 轻松更改引用的一种方法是以某种方式将引用包装在另一个对象中。

执行此操作的一个好方法是创建一个上下文对象并将该上下文对象传递给 B 和 C 而不是传递给 A。上下文对象充当我们的包装器的角色。如果多个变量需要在它们之间共享(共享/全局状态),则上下文对象会变得更有用 - 请参阅“上下文模式”。示例:

public class Context {
    public A a;
    public ...other state you want to share...;

    public Context(A a) { this.a = a; ... }
}

...

A a = new A();

Context context = new Context(a,...);

B b = new B(context);
C c = new C(context);

但是,根据您的情况,静态变量可能没问题。 (或者单例)

(在某些情况下,将 A 实例传递给 B 和 C 的方法,而不是传递给它们的构造函数,可能会更好 - 然后它们也总是获得 a 的当前版本(并且可能更线程安全) )

关于C#让多个类共享另一个类的同一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235240/

相关文章:

c# - Outlook 2007 加载项部署为 DLL

Ruby 在没有显式包含声明的情况下在子类上执行 self.included(base) 方法?

ruby - 如何使用 Ruby 的 self 关键字

command-line - SQL 2005 Express Edition - 安装新实例

c# - 使用表达式树构建 Func<int, double> 多项式

c# - 分组连续相同的项目 : IEnumerable<T> to IEnumerable<IEnumerable<T>>

c# - 生成具有方法类型的类的方法列表

javascript - 在 jquery click 函数中创建对象实例

c# - asp.net:在后面的代码中的 div 之后附加一个 div

C++ - 派生类 - 错误 : expected primary expression before'int'