gpt4 book ai didi

c# - 如何让派生类函数被执行?

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

我们有一个基类:Filter。 DistrFilter 和 ReportFilter 继承自 Filter。

在另一个类 FilterService.cs 中,我们有两个函数接受这三种类类型。 FilterService 对 Filter 对象进行操作,但它不继承任何对象。

public class FilterService
{

public string GetDesc(List<T> filters) where T : Filter
{
if(filters.Count == 0) return String.Empty;

StringBuilder s = new StringBuilder("<ul>");
foreach (T f in filters)
s.AppendFormat("<li>{1}</li>", GetFilterText(f));

s.Append("</ul>");

return s.ToString();
}

public string GetFilterText(Filter f)
{
return "filter";
}

public string GetFilterText(DistrFilter f)
{
return "distr filter";
}

public string GetFilterText(ReportFilter f)
{
return "report filter";
}
}

public static void main(string[] args)
{
List<DistrFilter> distrFilters = new List<DistrFilters>();
distrFilters.Add(new DistrFilter());
distrFilters.Add(new DistrFilter());
distrFilters.Add(new DistrFilter());

FilterService fs = new FilterService();
Console.WriteLine(fs.GetDescription(distrFilters));
}

然后打印:

  • 过滤器
  • 过滤器
  • ...

我怎样才能让它打印出来呢?

  • 分布过滤器
  • 分布过滤器
  • ...

最佳答案

Filter 类中添加一个虚方法,称为 GetName() 或类似的东西,并将其实现为 return "distr filter";DistrFilter 中作为 return "report filter";ReportFilter 中。然后只需在 GetDesc() 中调用 f.GetName()

或者,您可以在 GetDesc() 中使用像 if (f is DistrFilter) 这样的检查,但是那种结构,显式检查特定的派生类并处理它们不同的是,通常被认为是糟糕的设计。

关于c# - 如何让派生类函数被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618225/

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