C# 使用多态性访问自定义工具属性

C# 使用多态性访问自定义工具属性,c#,winforms,C#,Winforms,对C来说有些陌生。我将尽可能地解释我的问题 我很难获得在自定义工具上创建的属性。我的GUI上有很多这样的工具,所以它不像用属性显式地键入它那样简单。这些控件包含在一个列表中,我希望能够轻松访问它们的属性,这些属性是它们的独立解决方案项目的一部分。以下是我到目前为止所做的示例: List<Control> controlList = new List<Control>(); private void btnStart_Click(object sender, EventAr

对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

 }
因此,“item”的每个实例都有一个自定义控件属性,我可以使用for循环或其他方法更改该属性。注:根据计算,每个控制工具项将具有不同的MAC和代码

我不知道如何实现这一点。我想我的主要问题是我能够看到属性的默认列表,如Visible、Enable等。。。但不是我的自定义属性。执行类似于:controlList[0]的操作。由于同样的问题,代码对我也没有帮助。我显然误解了一些事情


提前感谢您的帮助。

要直接在列表对象中访问自定义属性,列表必须是自定义类的列表,而不是控件的列表。因此,与其

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


如果我没看错你的问题。。。只需将所有“共享”属性和方法添加到一个接口中,就可以让控件实现该接口,可能需要重写一个抽象基类。然后在controlList循环中,将控件转换为接口类型当你说custom tool时,你的意思是你已经创建了控件的子类吗?@ChristopheD谢谢你的帮助。听起来你已经理解了我的问题,但是我还没有达到我能够理解它然后实施你的回答程序的水平。如果你有时间,能提供一个我可以学习的例子吗?然后我就可以从这个理解的角度来实现了。这很有效!!我可以通过列表访问我的自定义属性。谢谢。
List<Control> controlList = new List<Control>();
List<MyCustomClass> controlList = new List<MyCustomClass>();