gpt4 book ai didi

c# - 引用我自己的类型的最佳方式

转载 作者:行者123 更新时间:2023-11-30 14:17:13 24 4
gpt4 key购买 nike

abstract class A<T> where T:A<T>
{
public event Action<T> Event1;
}

class B : A<B>
{
//has a field called Action<B> Event1;
}

有没有更优雅的方法来做到这一点?我希望基类中的东西(事件等)能够使用子类的类型。

最佳答案

您使用的模式实际上并未实现您想要的约束。假设你想模拟“动物只能对同类友好”:

abstract class Animal<T> where T : Animal<T>
{
public abstract void GetFriendly(T t);
}

class Cat : Animal<Cat>
{
public override void GetFriendly(Cat cat) {}
}

我们是否成功实现了所需的约束条件?没有。

class EvilDog : Animal<Cat>
{
public override void GetFriendly(Cat cat) {}
}

现在一只邪恶的狗可以对任何一只猫友好,而不是对其他邪恶的狗友好。

您想要的类型约束在 C# 类型系统中是不可能的。如果您需要类型系统强制执行的这种约束,请尝试使用 Haskell。

有关此主题的更多详细信息,请参阅我的文章:

http://blogs.msdn.com/b/ericlippert/archive/2011/02/03/curiouser-and-curiouser.aspx

关于c# - 引用我自己的类型的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309814/

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