转换类型

Rub*_*ben 1 c# type-conversion

我有以下问题.
我有一个班级"Instellingen",这是其他3个班级的一个领域

    public class Instellingen
    {
        private int _ID;
    }
    public class Class1: Button
    {
        private Instellingen _Instellingen;
    }
    public class Class2 : Label
    {
        private Instellingen _Instellingen;
    }
    public class Class3 : TextBox
    {
        private Instellingen _Instellingen;
    }
Run Code Online (Sandbox Code Playgroud)

如果我有另一个类,它使用其他类(但它可以是这3个类中的任何一个)我是否必须使用开关?或者有更简单的方法吗?

    public class AnotherClass
    {
        public AnotherClass ()
        {
            GetInstellingenFromClass(new Class1());
            GetInstellingenFromClass(new Class2());
            GetInstellingenFromClass(new Class3());
        }
        private void GetInstellingenFromClass(Control c)
        {
            switch (c.GetType.ToString())
            {
                case "Class1":
                    Class1 klasse = (Class1) c;
                    //Do something with the _Instellingen of this class
                    break;
                case "Class2":
                    Class2 klasse2 = (Class2) c;
                    //Do something with the _Instellingen of this class
                    break;
                case "Class3":
                    Class3 klasse3 = (Class3)c;
                    //Do something with the _Instellingen of this class
                    break;

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

(是否存在某些东西,所以我可以做一些像c._Instellingen - >而不先将其转换为正确的类型,c类型无关紧要?)

我希望你理解我的问题.

谢谢

SLa*_*aks 5

您应该创建一个具有属性的接口,Instellingen并在三个类中实现它.

例如:

interface IHasInstellingen {
    Instellingen Instellingen { get; }
}

public class Class1: Label, IHasInstellingen {
    public Instellingen Instellingen { get; private set; }
}
public class Class2: Button, IHasInstellingen {
    public Instellingen Instellingen { get; private set; }
}


private void GetInstellingenFromClass(IHasInstellingen c) {
    Instellingen ig = c.Instellingen;
    //Do things...
}
//Alternatively:
private void GetInstellingenFromClass(Control c) {
    IHasInstellingen hi = c as IHasInstellingen;
    if (hi == null)
        return;     //Or throw an ArgumentException

    Instellingen ig = hi.Instellingen;
    //Do things...
}
Run Code Online (Sandbox Code Playgroud)