2014-06-16 63 views
0

对C#有点新鲜。我会尝试尽我所能解释我的问题。使用多态性访问自定义工具属性

我很难获得我在自定义工具上创建的属性。我在我的GUI上有很多这些工具,所以它不像使用属性显式输入那样简单。这些控件包含在列表中,我希望能够轻松访问它们的属性(这是它们的独立解决方案项目的一部分)。这是我的东西我迄今为止例如:

List<Control> controlList = new List<Control>(); 
private void btnStart_Click(object sender, EventArgs e) 
{   
    foreach (var item in controlList) 
    { 
     if (item.Enabled) 
     { 
      custom_control1.Code = "8917237"; 
      custom_control1.MacAddress = "000000000001"; 
     } 
    } 

// do other stuff based on the above credentials 

} 

我希望能够做到以下在我的if语句:

item.Code = .... // calculation 
    item.MacAddress = .... // this will increment in hex depending on how many controls I have Enabled 

使“项”的每个实例都有该自定义控件属性,我可以改变一个for循环或什么。注意:根据计算,每个控制工具项目将具有不同的MAC和代码。

我不知道如何实现这一点。我想我的主要问题是我能够看到属性的默认列表(如可见,启用等),但不是我的自定义属性。做类似:controlList[0].Code也不能帮助我,因为同样的问题。我显然在这里误解了一些东西。

在此先感谢您的帮助。

+0

如果我正确地读你的问题......只是所有的“共享”的属性和方法添加到'interface',让你控制'implement'的接口(可能带有可能重写的抽象基类)。然后在你的controlList循环中,将你的控件强制转换为接口类型 – ChristopheD

+0

当你说“自定义工具”时,你的意思是你已经创建了Control的子类? –

+0

@ChristopheD感谢您的帮助。这听起来像你已经理解我的问题,但我不在我能够理解它的水平,然后执行你的回答程序。如果你有时间,是否有可能提供一个我可以学习的例子?那么我可能会从这个理解的角度来实施。 – Shen

回答

0

要直接在列表对象中访问您的自定义属性,列表需要是您的自定义类的列表,而不是Control。所以,与其

List<Control> controlList = new List<Control>(); 

使用

List<MyCustomClass> controlList = new List<MyCustomClass>(); 
+0

这工作!我可以通过List 获得我的自定义属性。谢谢。 – Shen