Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个字段作为参数传递给其他类中的方法,或传递'this',并将字段公开_C#_Field_Parameter Passing_Cancellation - Fatal编程技术网

C# 将多个字段作为参数传递给其他类中的方法,或传递'this',并将字段公开

C# 将多个字段作为参数传递给其他类中的方法,或传递'this',并将字段公开,c#,field,parameter-passing,cancellation,C#,Field,Parameter Passing,Cancellation,我想我错过了面向对象编程的一个基本概念 假设类B中的几个方法希望访问类A中声明的几个字段。我是否应该将所有字段作为参数传递给这些方法,从类A开始,一直传递到类B中可能很长的调用树?ClassBinInstance.StartToLongCallTreeP1、p2、p3 或者,我应该将字段公开并将其传递给方法。这样我只需要传递一个参数:classbinInstance.StartOfLongCallTreethis 或者,我应该将字段/属性设置为静态并在不传递任何参数的情况下访问它们吗?这仅适用于

我想我错过了面向对象编程的一个基本概念

假设类B中的几个方法希望访问类A中声明的几个字段。我是否应该将所有字段作为参数传递给这些方法,从类A开始,一直传递到类B中可能很长的调用树?ClassBinInstance.StartToLongCallTreeP1、p2、p3

或者,我应该将字段公开并将其传递给方法。这样我只需要传递一个参数:classbinInstance.StartOfLongCallTreethis

或者,我应该将字段/属性设置为静态并在不传递任何参数的情况下访问它们吗?这仅适用于字段不需要在不同实例之间明显变化的情况。ClassBinInstance.StartToLongCallTree。ClassA.p1等,以访问静态字段

取消线程中的循环的CancellationToken就是一个例子。我的程序中有一个很长的调用树,它跨两个类/线程运行。我可以将令牌向下传递到调用树,也可以将其设置为公共静态属性,以避免传递令牌。我该选哪一个


非常感谢。

取决于应用程序,将字段或方法设置为statis可能非常危险,因为它们在其所有者类的每个实例中都是相同的,但大多数情况下,如果类B中需要类A的多个属性,那么类B将保存类A的实例而不是其属性,并使用该实例访问字段,因此只需在A到B中传递该属性就足够了,您传递的对象是类的实例,您可以为所有公共成员使用一个接口,并将其传入。我不建议将方法/成员设置为B类静态,除非您有充分的理由这样做。请您添加一些到目前为止您已经尝试过的示例代码。@Andrew我找不到我所说的通过课程的地方。如果我有那个打字错误,我会改正的。我正在传递这个,这是一个实例。