Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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# 从另一个类中的另一个方法访问变量_C#_Oop - Fatal编程技术网

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.