C# 从另一个类中的另一个方法访问变量
假设我在该文件中有一个文件C# 从另一个类中的另一个方法访问变量,c#,oop,C#,Oop,假设我在该文件中有一个文件ABC.CS,我有一个类ABC,如下所示,方法Test(): 我想访问a,b。。。在另一个文件的另一个类的另一个方法中 文件:XYZ.cs 类别:XYZ 方法:mymethodos() 注意:变量可以是任何类型,如int、float和DataTable等 已更新 似乎人们忽略了静态关键字,请给出工作示例 我该怎么做 谢谢。将变量声明为public和static方法的外侧 只需使用ClassName.VariableName 希望这有帮助。你不能。你应该在你的方法之外
ABC.CS
,我有一个类ABC
,如下所示,方法Test()
:
我想访问a
,b
。。。在另一个文件的另一个类的另一个方法中
- 文件:
XYZ.cs
- 类别:
XYZ
- 方法:
mymethodos()
int
、float
和DataTable
等
已更新
似乎人们忽略了静态
关键字,请给出工作示例
我该怎么做
谢谢。将变量声明为
public
和static
方法的外侧
只需使用ClassName.VariableName
希望这有帮助。你不能。你应该在你的方法之外定义你的变量,并将它们公开。或者如果你的另一个类继承自
ABC
,那么你可以将它们设置为受保护的,你不能通过反射访问本地变量,但你可以访问静态变量,理论上你不能这样做,但是如果你稍微改变一下方法,你可能会得到你想要的
公开声明对象列表并从其他类访问它
public List<object> differentVarColl = new List<object>();
void MethodA()
{
int a = 0;
int b = 10;
double c = -90;
DataTable dtData = new DataTable();
//Do rest of things
differentVarColl.Add(a);
differentVarColl.Add(b);
differentVarColl.Add(c);
differentVarColl.Add(dtData);
}
public List differentitvarcoll=new List();
void MethodA()
{
int a=0;
int b=10;
双c=-90;
DataTable dtData=新的DataTable();
//做其他的事情
增加(a)项;
增加(b)项;
添加(c);
差分ARCOLL.Add(dtData);
}
从另一个方法中,迭代列表并根据其类型将其存储在新的一些变量中
我希望这有帮助。 迄今为止我所看到的其他答案都给出了我认为非常糟糕的建议。
如果没有更集中的例子,很难说最好的方法是什么。通常,您希望避免方法产生副作用——这会使调试和测试应用程序变得更加困难。基本上,如果您使用相同的输入调用该方法100次,它应该返回相同的结果100次
通常,一种好的方法是让方法返回表示其执行的操作结果的内容
因此,您有一个表示返回值的类或结构:
public struct SomeMethodResult
{
public int WhateverProperty {get;set;}
public int WhateverOtherProperty {get;set;}
}
然后根据需要返回该类的实例:
public SomeMethodResult SomeMethod()
{
var result = new SomeMethodResult();
result.WhateverProperty = 1;
result.WhateverOtherProperty = 2;
//etc
return result;
}
如果您正在从测试调用方法XYZ.myMethod,那么myMethod必须是静态方法。在本例中,对于值类型变量,使用ref调用值类型的方法
如果您需要访问变量,就像您需要访问Datatable一样,直接使用类名或对象引用,那么您需要将变量声明为类变量并使其成为静态的
完成此操作后,请尝试在静态构造函数中初始化datatable:
static ABC()
{
ABC.SomeDataTableVariable = new DataTable();
}
请尝试一下。使用静态变量/函数是一回事;从变量的作用域之外访问变量是另一回事
从MSDN:
如果使用Static关键字声明局部变量,则其生存期
大于其所在过程的执行时间
宣布。如果过程在模块内,则静态变量
只要您的应用程序继续运行,它就会继续存在
静态变量也将存在于每个类中,而不是每个实例
因此,我假设您需要ABC类的实例:
public class ABC
{
private int a; //also you can add 'readonly' if you will not change this value in its lifetime
private int b;
private int c;
public int A()
{
get { return a; }
}
public int B()
{
get { return b; }
}
public int C()
{
get { return c; }
}
public void Test()
{
a=10;
b=11;
c=12;
//many many variables
}
}
从另一个类中,您可以调用:
ABC abcInstance = new ABC();
abcInstance.Test(); //you set the values
int aTemp = abcInstance.A(); // now you have the 'a' value of ABC's property.
如果我使用DataTable
并将其设置为静态和公共,那么它只是一个null
如果您对其进行初始化,它就不会为null如果我使用DataTable并将其设置为静态和公共,它只是一个null。您正在尝试执行框架中不允许的操作。
ABC abcInstance = new ABC();
abcInstance.Test(); //you set the values
int aTemp = abcInstance.A(); // now you have the 'a' value of ABC's property.