【发布时间】:2012-12-05 19:41:38
【问题描述】:
我想知道为什么当我从继承自 Event 的 Leisure 类访问属性时,我的 Events 类中的私有变量“name”不会改变。我需要 Leisure 使用属性来更改它,然后在我的表单类中,它应该能够从事件中读取“名称”的值。见下文:
public partial class Form1 : Form //Main form class
{
private string eventType; //used for event type selection
private string formEventName; //used to store selected event name
private void itemSend_Click(object sender, EventArgs e)
{
//encapsulation
Events myEv = new Events();
string name=itemInput.Text;
myEv.myEvent(eventType, name);
formEventName = myEv.myName;
txtOutput.Text = "Event name is " + formEventName + "\r\n";
}
class Events:Form1
{
private string name; //private variable for event name
public string myName //used to change property value depending on what eveny type/ event name
{
get { return name; }
set { name = value; }
}
public void myEvent(string eventType, string eventName) //variable recieved from main form class
{
if (eventType == "Leisure")
{
Leisure myLes = new Leisure();
myLes.eventNames(eventName);
}
else
{
//test for other event types
}
}
class Leisure:Events
{
public void eventNames(string eventName)
{
//when adding new items add one with a capital and one without
myEventNames.Add("music");
myEventNames.Add("Music");
if (myEventNames.Contains(eventName))
{
myName = eventName;
}
else
{
MessageBox.Show("item not found, please try again"); //error message
}
}
}
【问题讨论】:
-
myEventNames来自哪里? -
myEventNames 是类中的一个列表,抱歉我必须忘记复制那部分代码
-
老实说,高水平的设计让我很困扰。这些形式几乎肯定不应该相互继承。您让自己感到困惑,因为您认为您可以访问所有父母的方法,但实际上您并没有与父母互动,因为没有在适当的实例上调用这些方法。继承不是这些表单进行交流的正确方式。
-
为什么是
Events和Leasure类型的表单?据我所知,它们根本不应该是表单,因为它们没有显示出来,也没有与消息框之外的 UI 元素进行交互。这两个类的真正目的是什么?他们在高层次上试图完成什么? -
活动和休闲只是类。事件应该能够访问来自休闲类的信息,然后将这些信息返回到表单中
标签: c# forms inheritance properties private