gpt4 book ai didi

generics - 抽象泛型类采用本身从该类派生的类型参数

转载 作者:行者123 更新时间:2023-12-04 21:25:51 28 4
gpt4 key购买 nike

您认为创建一个抽象泛型类并将派生自自身的类作为类型参数是可以接受的还是不好的做法?

这允许抽象泛型类操作派生类的实例,特别是能够根据需要创建派生类的 new() 实例,并且可以帮助避免在派生自它的具体类中重复代码。

如果“不好”,您更喜欢哪种替代方案来处理这种情况,您将如何构建下面的代码?

例如:-

    // We pass both the wrapped class and the wrapping class as type parameters 
// to the generic class allowing it to create instances of either as necessary.

public abstract class CoolClass<T, U>
where U : CoolClass<T, U>, new()
{
public T Value { get; private set; }
protected CoolClass() { }
public CoolClass(T value) { Value = value; }
public static implicit operator CoolClass<T, U>(T val)
{
// since we know the derived type and that its new(), we can
// new up an instance of it (which we couldn't do as an abstract class)
return new U() { Value = val};
}
public static implicit operator T(CoolClass<T, U> obj)
{
return obj.Value;
}
}

还有一个额外的问题:为什么这些隐式运算符中的一个有效而另一个无效?

例如
    public class CoolInt : CoolClass<int, CoolInt>
{
public CoolInt() { }
public CoolInt(int val) (val) { }
}

// Why does this not work
CoolInt x = 5;
// when this works
CoolInt x2 = (CoolInt)5;
// and this works
int j = x;

最佳答案

这是 C++ 中的一种常见(而且很好!)模式,看起来有点像这样:

template<typename T> class Base {
void foo() { T::foo(); /* Call the derived implementation*/ }
};
class Derived : public Base<Derived> {
void foo() { /* do something*/ }
};

我们将它用于静态多态/继承,以及其他。

但是,在 .NET 中,泛型参数在运行时并且也有反射,我不完全确定好处在哪里。我的意思是,派生类型很有用,但你必须问自己——有什么用,它与直接继承有什么不同?

关于generics - 抽象泛型类采用本身从该类派生的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330841/

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