如何将值从一个子类传递到主类C#中的另一个子类?

问题描述:

我创建了一个名为MyMainClass如何将值从一个子类传递到主类C#中的另一个子类?

namespace MyTest 
{ 
     private void frmMain_Load(object sender, EventArgs e) 
     { 
      MyMainClass myVar = new MyMainClass(); 

      myVar.sub1.sb1A = "value 1A"; 
      myVar.sub1.sb1B = "value 1B"; 

      MessageBox.Show(myVar.sub2.wantPassString); 
      //I want to print the value "I've got value value 1A" 
     }    
    public class MyMainClass 
    { 
     public subClass1 sub1 = new subClass1(); 
     public subClass2 sub2 = new subClass2(); 

     public class subClass1 
     { 
      public string sb1A{get;set;} 
      public string sb1B{get;set;} 
     } 
     public class subClass2 
     { 
      public string sb2A{get;set;} 
      public string sb2B{get;set;} 
      // a1a is a value that I want to get from subClass1 
      string a1a = subClass1.sb1A; 

      public string wantPassString {get{return "I've got value " + a1a;}} 
     } 
    } 
} 

类如何传递的值从subClass1.sb1A字符串A1AwantPassString在subClass2?当我打电话frmMain_Load

+0

你知道'subClass1'和'subClass2'不是子类吗? – Enigmativity

+0

那么,我应该怎么称呼我的应用程序中的subClass1和subClass2,我认为MyMainClass将覆盖那些2,所以我称之为子类。否则,谢谢。 –

+0

一个子类是当你有'class A {}'&'class B时:一个{}' - 在这种情况下,类'B'是'A'的子类。在你的情况下,他们只是对象,如果你愿意,你可以称它们为'X'和'Y',只是不会让人感到困惑。 – Enigmativity

正常的方法是通过传递类构造函数。这个作品:

public class MyMainClass 
{ 
    public MyMainClass() 
    { 
     sub1 = new subClass1(); 
     sub2 = new subClass2(sub1); 
    } 
    public subClass1 sub1; 
    public subClass2 sub2; 

    public class subClass1 
    { 
     public string sb1A{get;set;} 
     public string sb1B{get;set;} 
    } 
    public class subClass2 
    { 
     public subClass2(subClass1 sub1) 
     { 
      this.sub1 = sub1; 
     } 
     public string sb2A{get;set;} 
     public string sb2B{get;set;} 
     subClass1 sub1; 

     public string wantPassString {get{return "I've got value " + sub1.sb1A;}} 
    } 
} 
+0

我尝试你的方法,但运行时它将null传递给a1a –

+0

@MonySnap - 是的,对不起。我更改了代码。它现在应该工作。 – Enigmativity

+0

非常感谢你,这真的很有用。 –

一种选择是创建方法,而不是像财产

 public string wantPassString(string param) 
    { 
     return "I've got value " + param; 
    } 

和frmMain_Load调用此方法

MessageBox.Show(myVar.sub2.wantPassString(a1a)); 
+0

我用你的方法从subclass1获取值,但我希望它完成subClass2中的代码。当我在frmLoad中使用时,我想调用myVar.sub2.wantPassString –

创建第三个类来保存数据。

public MainClass 
{ 
    private class sharedClass 
    { 
     internal string sb1A { get; set; } 
    } 

    public class subClass1 
    { 

     private readonly sharedClass _shared; 
     internal subClass1(sharedClass shared) 
     { 
      this._shared = shared; 
     } 

     public string sb1A 
     { 
      get 
      { 
       return this._shared.sb1A; 
      } 
      set 
      { 
       this._shared.sb1A = value; 
      } 

     public string sb1B{get;set;} 
    } 

    public class subClass2 
    { 
     private readonly sharedClass _shared; 
     public subClass2(shared s) 
     { 
      _shared = s; 
     } 
     public string sb2A{get;set;} 
     public string sb2B{get;set;} 


     public string wantPassString {get{return "I've got value " + _shared.sb1;}} 
    } 

    private readonly sharedClass _shared = new sharedClass(); 
    private readonly subClass1 _subClass1; 
    private readonly subClass2 _subClass2; 

    public MainClass() 
    { 
     this._subClass1 = new subClass1(this._shared); 
     this._subClass2 = new subClass2(this._shared); 
    } 
} 
+0

谢谢我会试试你的。 –

+0

代码中出现错误,代码中出现错误。 –

您可以添加额外的属性和方法,并将其作为参数传递:

public string sb2C{ get; set; } 
     public string getData(string strParam) 
     { 
      return sb2C= strParam; 
     } 

然后在您的frmMain_Load:

MessageBox.Show(myVar.sub2.getData(myVar.sub1.sb1B)); 
//This would also populate sb2C that will hold the data from the other class 
+0

我想在subClass2中完成代码,所以当我在frmMain_Load中调用myVar.sub2.wantPassString时,我可以获得我想要的值。 –