2014-02-22 68 views
0

为了达到的可管理性,我需要有一个VariablesMethods的类。 问题是我不知道如何访问方法类中分配的变量的值。如何从一个变量中获取值,该值是在另一个类中赋值的变量?

这里是可变的类,它只是持有变量:

namespace Classes 
{ 
    class MyVariableClass 
    { 
     public string MyVariable { get; set; } 
    } 
} 

这里是方法: 我打电话变量类的实例的方法类,这样我可以分配变量到该方法的值。

namespace Classes 
{ 
    class MyMethods 
    { 
     MyVariableClass myVarClass = new MyVariableClass(); 

     public void DoSomeStuff(string myString1, string myString2) 
     { 
      myVarClass.MyVariable = (!string.IsNullOrEmpty(myString2) 
       ? myString2 : "String 2 has nothing!"); 
     } 
    } 
} 

最后,以下是主要方法: 当我运行这段代码,MyVariable的返回null,我假设我在访问变量之前它被赋予它的价值?

如何获取Method类中赋值的变量?

namespace Classes 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyMethods myMethod = new MyMethods(); 
      MyVariableClass myVarClass = new MyVariableClass(); 

      string something = "something"; 
      string nothingHere = null; 

      myMethod.DoSomeStuff(something, nothingHere); 

      //I need to call MyVariable here 
      //Or be able to access it's values assigned in the MyMethod Class. 

      Console.Write(myVarClass.MyVariable); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

可变'myVarClass'在方法'Main'和场''的类MyMethods'是myVarClass'不同的对象。 –

回答

2

问题:您在两个不同的对象的工作。

  1. 您正在创建一个对象,其实例变量myVarClassMyMethods类中。
  2. 您正在使用Main()方法中的实例变量myVarClass创建另一个新对象。

注:你应该总是remeber,在面向对象的编程对象是独立的,保持自己的副本,以便修改一个对象参数/属性不列入影响其他对象参数或属性。

溶液:而不是创建两个不同的对象创建具有例如在Main()方法可变myVarClass只有一个对象,并将其传递给myClass方法。

所以你应该改变你的myClass方法DoSomeStuff()如下接受Main()方法`MyVariableClass``

public void DoSomeStuff(MyVariableClass myVarClass, string myString1, string myString2) 
{ 
    //do something 
} 

实例变量调用如下上述方法:

MyVariableClass myVarClass = new MyVariableClass();  
string something = "something"; 
string nothingHere = null;  
myMethod.DoSomeStuff(myVarClass, something, nothingHere); 

完成代码:

namespace Classes 
{ 
    class MyMethods 
    {    
     public void DoSomeStuff(MyVariableClass myVarClass, string myString1, string myString2) 
     { 
      myVarClass.MyVariable = (!string.IsNullOrEmpty(myString2) 
       ? myString2 : "String 2 has nothing!"); 
     } 
    } 
} 

和主程序应该是:

namespace Classes 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyMethods myMethod = new MyMethods(); 
      MyVariableClass myVarClass = new MyVariableClass(); 

      string something = "something"; 
      string nothingHere = null; 

      myMethod.DoSomeStuff(myVarClass, something, nothingHere); 

      //I need to call MyVariable here 
      //Or be able to access it's values assigned in the MyMethod Class. 

      Console.Write(myVarClass.MyVariable); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

'Main()方法中的实例变量myVarClass'它是局部变量。 –

+0

@HamletHakobyan:我没有得到你,请你详细说明一下吗? –

+0

谢谢我的朋友们:这些都是非常好的和有趣的解决方案。 – Asynchronous

1

MyMethodsmyVarClass成员是默认私有的,所以如果你希望能够从类本身之外调用它,那么你需要使它public

一旦公开,你就能够做到:

static void Main(string[] args) 
{ 
    MyMethods myMethod = new MyMethods(); 
    MyVariableClass myVarClass = new MyVariableClass(); 

    string something = "something"; 
    string nothingHere = null; 

    myMethod.DoSomeStuff(something, nothingHere); 

    //I need to call MyVariable here 
    //Or be able to access it's values assigned in the MyMethod Class. 

    Console.Write(myMethod.myVarClass.MyVariable); 
    Console.ReadKey(); 
} 

另外,要小心的是,在main定义的myVarClass是一个完全不同的对象。

干杯

1

定义你的类为:

namespace Classes 
{ 
    class MyMethods 
    { 
     public MyVariableClass MyVarClass {get; private set;} 


     public void DoSomeStuff(string myString1, string myString2) 
     { 
      if(MyVarClass == null) 
      { 
       MyVarClass = new MyVariableClass(); 
      } 

      MyVarClass.MyVariable = (!string.IsNullOrEmpty(myString2) 
       ? myString2 : "String 2 has nothing!"); 
     } 
    } 
} 

然后根据使用:

namespace Classes 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyMethods myMethod = new MyMethods(); 

      string something = "something"; 
      string nothingHere = null; 

      myMethod.DoSomeStuff(something, nothingHere); 

      //I need to call MyVariable here 
      //Or be able to access it's values assigned in the MyMethod Class. 

      Console.Write(myMethod.MyVarClass.MyVariable); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

你可以告诉我在上面的方法中实例化类时是否需要条件语句?试图理解你的方法。 (MyVarClass == NULL) { MyVarClass = new MyVariableClass(); }' – Asynchronous

+0

延迟初始化。您可以避免这种构造,并在构造函数或声明中初始化它。 –

相关问题