gpt4 book ai didi

c# - 我怎样才能接受一个泛型类并使用它的属性/方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:14 25 4
gpt4 key购买 nike

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

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 类包含正在使用的 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; }
}

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

关于c# - 我怎样才能接受一个泛型类并使用它的属性/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com