从另一个类中的另一个方法访问变量

时间:2014-03-06 05:58:55

标签: c# oop

假设我在该文件中有一个文件ABC.CS我有一个类ABC,如下所示,方法Test()

public class ABC
{
   public static void Test()
      {
            int a=10;
            int b=11;
            int c=12;
               //many many variables
      }
}

我想访问ab ...等另一个另类文件的另一个方法说

  • 文件:XYZ.cs
  • 分类:XYZ
  • 方法:MyMethos()

注意:变量可以是任何类型,例如intfloatDataTable

更新 似乎人们忽略了static关键字,请举例说明

我该怎么做?

感谢。

7 个答案:

答案 0 :(得分:3)

将变量声明作为方法的publicstatic

您只需使用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.