首页 新闻 搜索 专区 学院

C#两个类中,想共用一个变量,不使用静态全局变量,还有其他方法嘛?

0
[已解决问题] 解决于 2020-04-26 16:36

题目是这样的:现在有三个类C1、C2、C3.
存在多个实例C3
每个C3实例化了一个C1,在C1中会实例一个C2,现在C1和C2需要操作同一个变量a1,
请问这个a1应该怎样声明?声明去哪里?

问题补充:

还有一个问题是。C1会创建多个C2实例。C1和C2的所有实例都公用a1。
案列是。。C3是服务器窗体,C1是服务器类,C2是服务器接收到的客户端类。a1是存储客户端的列表LIst<C3>

😀明笔记的主页 😀明笔记 | 初学一级 | 园豆:29
提问于:2020-04-26 15:29
< >
分享
最佳答案
0

是所有的C1 C2都要共享同一个a1吗?还是只有C3中的C1 C2要共享同一个a1,
如果是第二种,a1直接定义在C3中就行了
如果是第一种,不适用静态全局的话,考虑一下单例模式,找个类把a1封装起来,然后C1,C2操纵这个实例
搞不懂是啥需求不让是全局变量啊

奖励园豆:5
猝不及防 | 小虾三级 |园豆:1988 | 2020-04-26 15:41

可以是全局。但是不能是静态的。因为C3有多个实例。不能共用一个全局变量。
每个C3中的C1和C2共享一个a1.
还有一个问题是。C1会创建多个C2实例。C1和C2的所有实例都公用a1。

😀明笔记 | 园豆:29 (初学一级) | 2020-04-26 15:47

@😀明笔记:
C3有多个实例。不能共用一个全局变量。
每个C3中的C1和C2共享一个a1.
C1会创建多个C2实例。C1和C2的所有实例都公用a1。

这不就是第一种吗
在C3实例的作用域中,所有C1 C2 用同一个a1,你把a1定义成C3的一个字段或者属性就行了啊

猝不及防 | 园豆:1988 (小虾三级) | 2020-04-26 15:52

@猝不及防: 可是实例C3的对象,C1和C2不可见啊。怎么访问。?a1这个属性又不能命名为静态的前提下。

😀明笔记 | 园豆:29 (初学一级) | 2020-04-26 15:59

@😀明笔记:
如果你的A1是引用类型的,好办了
创建C1,C2的时候
在C3:
C1.A1=THIS.A1
在C1:
C2.A1=THIS.A1
然后C1和C2操作自己的A1就好了,反正都是同一个实例

如果是值传递的
老老实实在C1,C2中加一个C3类型的变量
然后每次C3.A1=XXX;

猝不及防 | 园豆:1988 (小虾三级) | 2020-04-26 16:05

@猝不及防: 这个引用类型中,为什么字段可以引用。属性就不可以?

😀明笔记 | 园豆:29 (初学一级) | 2020-04-26 16:15

@😀明笔记: 字段属性都可以,区别是值传递的话你要构建C3类型的字段或者属性

猝不及防 | 园豆:1988 (小虾三级) | 2020-04-26 16:33

@猝不及防: 引用要使用ref和out吧。这两个不能应用在属性。之前就是用属性。所有解决不了问题。现在改了字段就可以了。。-

😀明笔记 | 园豆:29 (初学一级) | 2020-04-26 16:34

@😀明笔记: 牛逼,下次给点分

猝不及防 | 园豆:1988 (小虾三级) | 2020-04-26 16:35

@猝不及防: 感谢大佬相助

😀明笔记 | 园豆:29 (初学一级) | 2020-04-26 16:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册