gpt4 book ai didi

c# - 覆盖继承的泛型方法

转载 作者:IT王子 更新时间:2023-10-29 04:21:16 26 4
gpt4 key购买 nike

我在基类中有这段代码

 protected virtual bool HasAnyStuff<TObject>(TObject obj) where TObject:class 
{
return false;
}

在子类中我重写

protected override bool HasAnyStuff<Customer>(Customer obj) 
{
//some stuff
if Customer.sth etc
return false;
}

我收到这个错误

'''Type parameter declaration must be an identifier not a type'''

我这里做错了什么?

最佳答案

您不能在派生类中重写泛型方法的类型参数。要实现类似的功能,一种选择是让您的基类成为泛型类,并让您的派生类如

class Derived : BaseClass<Customer>
{
protected override bool HasAnyStuff(Customer customer)
{
// ...
}
}

其中 BaseClass 声明为

class BaseClass<T> where T : class
{
// ...
protected virtual bool HasAnyStuff(T obj)
{
// ...
}
}

或者,根据派生类的具体使用方式,您可以使用非泛型 Customer 参数覆盖 HasAnyStuff 方法。

public bool HasAnyStuff(Customer customer)
{
// ...
}

但是,请注意,如果您没有使用 DerivedClass 的实例,则不会调用新的 HasAnyStuff。也就是说,

BaseClass foo = new DerivedClass();
foo.HasAnyStuff(new Customer());

将调用BaseClass的泛型方法,而不是DerivedClass的非泛型方法。

关于c# - 覆盖继承的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676940/

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