C# C语言的继承
我试图使用继承来使用ref.class将字符串从一种形式传递到另一种形式。我看着它,说实话,我认为这应该行得通。但是当调试时,我的设置文本框中什么都没有出现 这是我的参考课: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
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做完全忘记了一切。感谢您的帮助,因为我将在以后使用一些对象时使用此作为参考。