我想创建一个可以容纳许多相同类型的类的类。例如,让我们说我有一个如下的基类:

public class BaseClass
{
    public string MyBaseString
    {
         get;
         set;
     }
}


然后,我有一些这样的派生类:

public class DerivedClass : BaseClass
{
     public MyDerivedClassString
     {
         get;
         set;
     }
}

public class DerivedClass2 : BaseClass
{
     public MyDerivedClass2String
     {
         get;
         set;
     }
}


现在,我想要一个接受这些实现之一并对其进行填充的类。这是我唯一能想到的,但是必须有更好的方法:

public class ClassA
{
    public object MyClass
    {
        get;
        set;
    }

    public ClassA (object myClass)
    {
        MyClass = myClass;
        if (object is BaseClass)
        {
              //do something
        }
        else if (object is DerivedClass)
        {
             //do something specific to derived class
        }
        else if (object is DerivedClass2)
        {
             //do something specific to derived class 2
        }
    }
}


澄清:我要实现的特定目标是将ClassA用作BaseClass的各种实现的容器类。我要实现的业务目标是创建一个Legend对象,该对象可能使用多种配色方案(即Mono Color Ramp,Multi Color Ramp等)。因此,我希望Legend类包含正在使用的ColorScheme,但仍然可以访问该配色方案的唯一属性,以便稍后进行修改。

澄清2基于我得到的广泛答复,我认为我将提供我正在尝试做的事情的精确复制:

   public class BaseColorScheme
    {
        List<Color> _colors = new List<Color>();
        public List<Color> Colors
        {
            get
            {
                return _colors;
            }
            set
            {
                _colors = value;
            }
        }
 }

 public class SingleColorScheme : BaseColorScheme
 {

        public Color MidColor
        {
            get;
            set;
        }

        public SingleColorScheme( Color midColor, int numberOfClassifications )
        {
            Colors = CreateMonoColorRamp( midColor, numberOfClassifications );
        }
}

public class MultiColorScheme : BaseColorScheme
{
    public Color StartColor
    {
        get;
        set;
    }
    public Color EndColor
    {
        get;
        set;
    }
    public Color MidColor
    {
        get;
        set;
    }

    public MultiColorScheme( Color startColor, Color endColor, Color midColor )
    {
        StartColor = startColor;
        EndColor = endColor;
        MidColor = midColor;

        Colors = //do something to define multi color scheme
    }
}


然后我会有一个传奇类,就像

public class Legend
{
     public object ColorScheme
     {  get; set; }

     public Guid LegendId
     { get; set; }

     public Legend(object colorScheme)
     {
          ColorScheme = colorScheme;
     }
}


最后,我可能会有一个图例位于图例的顶部,该图根据它是哪种颜色方案显示各种颜色方案的属性。希望这有助于澄清。

最佳答案

public class ClassA<T> where T : BaseClass
{
   public T MyClass { get; set; }

   public ClassA(T myClass) { MyClass = myClass; }
}


除此之外,将类层次结构的公共接口定义为基类中的接口或方法(具体,抽象或虚拟)。然后,可以确保所有派生类都具有此类方法/属性,并且可以在通用包装器中使用它们。

关于c# - 如何接受通用类并使用其属性/方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3009841/

10-17 02:05