簡體   English   中英

如何在主類C#中將值從一個子類傳遞到另一個子類?

[英]How can I pass value from one subclass to another subclass in a main class C#?

我創建一個名為MyMainClass的類

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中的值傳遞給subClass2中的字符串a1awantPassString 當我打電話給frmMain_Load

通常的方法是將類傳遞給構造函數。 這有效:

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;}}
    }
}

一種選擇是創建方法而不是像

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

並在frmMain_Load中調用此方法

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

創建一個第三類來保存數據。

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);
    }
}

您可以添加其他屬性和方法,並將其作為參數傳遞:

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM