gpt4 book ai didi

c# - 在 C# 中,有没有办法编写一个泛型,使得 Object : Object?

转载 作者:行者123 更新时间:2023-11-30 20:11:45 26 4
gpt4 key购买 nike

有没有办法在 C# 中做这样的事情?考虑以下示例并假设 Child1、Child2、Child3 都是 Parent 的 child -

class Class1
{

SomeObject< Parent > mSomeObject;

Class1()
{

if (condition1)

mSomeObject = new SomeObject<Child1>();

else if (condition2)

mSomeObject = new SomeObject<Child2>();

else if (condition3)

mSomeObject = new SomeObject<Child3>();

}

}

想法是 Class1 将 SomeObject 作为成员,但直到运行时才确定它应该采用 SomeObject 的什么通用形式。任何帮助,将不胜感激。谢谢!

最佳答案

你应该使用基于接口(interface)的继承。这将允许 child1、child2 和 child3 是多态的,并在不需要这种保护逻辑的情况下具有父级的特征。随着 IF 测试的消失,您的代码将更具可读性,并且以后更容易修改。

这是我刚刚用 LINQPad 编写的示例,用于展示这一点。

public interface ICar
{
bool IsAutomatic();
}

public class Silverado : ICar
{
public bool IsAutomatic()
{
return true;
}
}

public class Semi : ICar
{
public bool IsAutomatic()
{
return false;
}
}

void Main()
{
ICar car = new Silverado();
bool isAuto = car.IsAutomatic();
isAuto.Dump();

car = new Semi();
isAuto = car.IsAutomatic();
isAuto.Dump();
}

输出:

True
False

我更喜欢基于接口(interface)的继承,而不是 AllenG 描述的抽象类。多重继承等原因——一个类可以实现多个接口(interface),但只能继承一个类。

希望这有助于...

关于c# - 在 C# 中,有没有办法编写一个泛型,使得 Object<Child> : Object<Parent>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292917/

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