gpt4 book ai didi

c# - 实现多个泛型类型的泛型接口(interface)——如何共享一个方法实现?

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

假设我有以下界面

public interface IFilter<T>
{
IEnumerable<T> ApplyFilter(IEnumerable<T> list);
}

具体实现如下:

public class PetFilter: IFilter<Dog>, IFilter<Cat>
{
public IEnumerable<Dog> ApplyFilter(IEnumerable<Dog> list)
{
return ApplyFilter<Dog>(list);
}

public IEnumerable<Cat> ApplyFilter(IEnumerable<Cat> list)
{
return ApplyFilter<Cat>(list);
}

private IEnumerable<T> ApplyFilter<T>(IEnumerable<T> list)
{
// do the work here
}
}

如果 Dog 和 Cat 共享相同的实现,是否有任何方法可以避免为它们实现单独的方法?

最佳答案

是也不是。当您在没有任何约束的情况下使用泛型时,编译器将无法知道如何对不同的类进行操作(即使它们以某种方式相关)。例如,想一想编译器如何知道 ApplyFilter 可以同时作用于 Cat 和 Dog 类?对它来说,狗和猫是完全不同的东西。

但是考虑到您的两个类都继承自同一个基类,您可以通过它们的公共(public)基类(或接口(interface))对它们进行操作,但是您的 PetFilter 类也需要是通用的。

public abstract class Pet
{
}

public class Dog : Pet
{
}

public class Cat : Pet
{

}

下面是一个泛型PetFilter类,它继承了IFilter,虽然IFilter没有泛型约束,但是你可以在PetFilter类中添加一个。

public class PetFilter<T> : IFilter<T> where T : Pet
{
public IEnumerable<T> ApplyFilter(IEnumerable<T> list)
{
throw new NotImplementedException();
}
}

关于c# - 实现多个泛型类型的泛型接口(interface)——如何共享一个方法实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354075/

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