假设我在该文件中有一个文件ABC.CS
我有一个类ABC
,如下所示,方法Test()
:
public class ABC
{
public static void Test()
{
int a=10;
int b=11;
int c=12;
//many many variables
}
}
我想访问a
,b
...等另一个另类文件的另一个方法说
XYZ.cs
XYZ
MyMethos()
。 注意:变量可以是任何类型,例如int
,float
和DataTable
等
更新
似乎人们忽略了static
关键字,请举例说明
我该怎么做?
感谢。
答案 0 :(得分:3)
将变量声明作为方法的public
和static
您只需使用ClassName.VariableName
希望这会有所帮助..
答案 1 :(得分:1)
你做不到。您应该在方法之外定义变量并将它们设为public
。或者,如果您的其他类继承自ABC
,那么您可以将它们设为protected
。
答案 2 :(得分:1)
您无法通过反射访问本地变量,但您可以访问静态变量
答案 3 :(得分:1)
理论上你不能这样做,但是如果你稍微改变一下这个方法,你就可以得到你想要的东西。
公开声明对象列表并从其他类访问它。
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);
}
从其他方法中,迭代列表并根据其类型将它们存储在新的变量中。
我希望这会有所帮助。
答案 4 :(得分:1)
到目前为止我看到的其他答案正在给出我认为非常糟糕的建议。
如果没有更多更有针对性的例子,很难说最好的方法是什么。通常,您希望避免使用具有副作用的方法 - 这会使调试和测试应用程序变得更加困难。基本上,如果使用相同的输入调用方法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;
}
答案 5 :(得分:1)
如果从Test中调用方法XYZ.myMethod,则myMethod必须是静态方法。在这种情况下,对于值类型变量,使用ref为值类型调用方法。
如果您需要访问该变量,因为您似乎需要直接使用类名或对象引用来访问Datatable,您需要将该变量声明为类变量并使其成为静态。
完成此操作后,尝试在静态构造函数中初始化数据表:
static ABC()
{
ABC.SomeDataTableVariable = new DataTable();
}
请试一试。
答案 6 :(得分:1)
使用 static 变量/函数是一回事; 从其范围之外访问变量是另一回事。
来自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.