C# C语言的继承

C# C语言的继承,c#,winforms,inheritance,polymorphism,C#,Winforms,Inheritance,Polymorphism,我试图使用继承来使用ref.class将字符串从一种形式传递到另一种形式。我看着它,说实话,我认为这应该行得通。但是当调试时,我的设置文本框中什么都没有出现 这是我的参考课: class Ref { private String _url; public String Sett { set { _url = value; } } public String Gett { get { return _ur

我试图使用继承来使用ref.class将字符串从一种形式传递到另一种形式。我看着它,说实话,我认为这应该行得通。但是当调试时,我的设置文本框中什么都没有出现

这是我的参考课:

    class Ref
{

    private String _url;

    public String Sett
    {

        set { _url = value; }
    }
    public String Gett
    {
        get { return _url; }
    }
我从主窗体设置它,从设置窗体获取它

    public void load()
    {
        Ref reff = new Ref();
        textBox3.Text = reff.Gett;
    }
这是我的主要表格:

    private void webBrowser1_DocumentCompleted(object sender,WebBrowserDocumentCompletedEventArgs e)
        {Ref reff = new Ref();
        this.Text = webBrowser1.Document.Title + " - NHS Cerner Booking Dash";
        textBox1.Text = webBrowser1.Document.Url.ToString();
        reff.Sett = webBrowser1.Document.Url.ToString();
最后这是我的设置表

    public void load()
    {
        Ref reff = new Ref();
        textBox3.Text = reff.Gett;
    }
我相信这看起来有点复杂。所以为了澄清,我想从主窗体中获取URL,并将其设置为我的ref.class,然后从ref.class中获取URL,将其设置为我设置窗体中的文本框。谢谢您的关注。

您不需要任何Ref类。在第二个表单中,创建公共属性,并在创建该表单时访问该属性并分配URL的值

表格2

 public string URL {get; set;}
表格一

 Form2 theNewForm = new Form2();
 theNewForm.URL = "your url value";
 theNewForm.Show();

希望这对您有用。

首先,这与继承无关

不,它绝对不应该起作用。您正在创建两个独立的Ref实例,因此在其中一个实例中设置值将无法在另一个实例中使用。您需要创建一个Ref实例,并使两个表单都知道它,以便它们可以将其用作共享通信通道

我个人认为这不是最好的交流方式——例如,你应该考虑使用事件,但这就是为什么现在不起作用的原因。 正如一篇评论中提到的,有两个独立的属性是非常奇怪的。如果我真的想要这种行为,我会把这个类写成:

public class MutableWrapper<T>
{
    public T Value { get; set; }
}

您正在每个位置创建一个新的Ref对象,因此您在webBrowser1\u DocumentCompleted中设置的值与在load中检索的值位于不同的对象上。

因为您在写入新对象时创建了新对象

public void load()
{
    Ref reff = new Ref();
    textBox3.Text = reff.Gett;
}
İ如果进行调试,可以看到reff为空


应该可以帮助您

为什么不以将要打开的表单创建一个公共属性呢。这样,您就可以在打开它之前设置它,并进一步使用它。

Puh,从这里开始

首先我建议你简化你的课程

public class Ref
{
    public string Url { get; set; }
}
但这不是问题所在

问题是Ref类有两个不同的实例

所以你可以做两件事

如果这是一个设置表单,您应该将Ref.Url的值保存到应用程序设置。 或 必须将Ref的实例传递到设置窗体。
好吧,这很难看,改为这样做:

class Ref
{

    private String _url;

    public String URL
    {

        set { _url = value; }
        get { return _url; }
    }
}
然后,您需要在主类中创建一个Ref实例,并在创建时将其传递给设置类。然后,您可以在设置类中填充它,如下所示:

myref.URL = "whatevergoeshere";

设置对话框完成后,您可以查看Ref对象内部的URL。

好的,您真的没有使用继承。。。你的问题是,你在两个不同的地方声明的参考号是不一样的

        private void webBrowser1_DocumentCompleted(object sender,WebBrowserDocumentCompletedEventArgs e)
        {
            Ref reff = new Ref();
            //not the same "Ref" as below
        }

        public void load()
        {
            Ref reff = new Ref();
            //not the same "Ref" as above
        }


        //consider using properties instead of members... you get the get/set for free
        public class Ref
        {
            public string URL { get; set; }
            public void Load()
            {
                //do your load set
                this.URL = "What you want";
            }
            //...
        }

        //you can also declare the constructor on the fly if you want.. or call the Load() method
        Ref myRef = new Ref()
        {
            URL = "What you want"
        };

为什么有两个属性,一个带getter,一个带setter,而不是一个带getter和setter的单值属性?这并不能解决问题……这个解决方案原来是最简单的。非常感谢。令人恼火的是,我以前做的是Java,当时非常简单。很干净,现在用C做完全忘记了一切。感谢您的帮助,因为我将在以后使用一些对象时使用此作为参考。