请问 C# 中如何在集合中存入不同类型的值?

m0_56737563 2023-03-28 23:36:31
public class Animal { /**/ }
interface I_CommonSkill {
    void Say();
}

public class Cat : Animal, I_CommonSkill
{
    public int age = 2;
    public void Say () { /*say age*/ };
}

public class Dog : Animal, I_commonSkill
{
    public string name = "ergou";
    public void Say () { /*say name*/ };
}

新手求问,如上结构希望有一个管理类来统一管理实例,比如将实例保存到 Hashtable 中循环调用子类的 Say 方法之类的,但是 Hashtable 中的元素类型都是 object 接下来就是各种报错,不是找不到属性就是找不到方法,现在只能结合泛型强制转换类型来调用方法和获取属性。

有什么方法让管理类在存储这些实例的时候知道对象是不同子类的实例?或者说该如何统一管理这些数据结构不同的对象呢?之前一直在用动态语言思维可能不太适用静态语言还望大佬们指点一二谢谢了……

...全文
549 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bidisty 2023-07-17
  • 打赏
  • 举报
回复
List<I_CommonSkill> 

调用集合的方法操作就行了

qq_22874111 2023-03-29
  • 打赏
  • 举报
回复

在 C# 中,可以使用泛型来解决你提到的问题。你可以使用泛型 Hashtable,这样就可以存储不同类型的值,同时也可以避免了类型转换和运行时错误的问题。以下是一个使用泛型 Hashtable 的示例代码:
// 创建一个泛型 Hashtable,用于存储不同类型的实例
Hashtable<MyClassType, MyBaseClass> myHashtable = new Hashtable<MyClassType, MyBaseClass>();

// 存储不同类型的实例
myHashtable.Add(MyClassType.Type1, new MyType1());
myHashtable.Add(MyClassType.Type2, new MyType2());
myHashtable.Add(MyClassType.Type3, new MyType3());

// 遍历 Hashtable 中的元素,调用子类的 Say 方法
foreach (MyBaseClass item in myHashtable.Values)
{
item.Say();
}

// 定义一个枚举,用于标识不同类型的实例
enum MyClassType
{
Type1,
Type2,
Type3
}

// 定义一个基类 MyBaseClass,其中包含一个 Say 方法
abstract class MyBaseClass
{
public abstract void Say();
}

// 定义三个子类,分别继承 MyBaseClass,实现 Say 方法
class MyType1 : MyBaseClass
{
public override void Say()
{
Console.WriteLine("MyType1 says hello!");
}
}

class MyType2 : MyBaseClass
{
public override void Say()
{
Console.WriteLine("MyType2 says hello!");
}
}

class MyType3 : MyBaseClass
{
public override void Say()
{
Console.WriteLine("MyType3 says hello!");
}
}
通过使用泛型 Hashtable,我们可以定义一个存储 MyBaseClass 子类实例的 Hashtable,并且可以遍历 Hashtable 中的元素并调用其 Say 方法,而不需要担心类型转换或运行时错误。同时,通过定义一个枚举 MyClassType,我们可以为不同类型的实例分配标识符,使得管理类可以在存储实例时知道对象是哪个子类的实例。

111,113

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧