【问题标题】:Generic or overloaded methods泛型或重载方法
【发布时间】:2013-11-04 21:23:11
【问题描述】:

我有三种方法。将它们合二为一的最佳方法是什么。

public App Get(customobj data, string x)
{
    return null;
}

public Con Get(customobj data, string x)
{
    return null;
}

public Env Get(customobj data, string x)
{
    return null;
}

【问题讨论】:

  • 你在这些方法中做了什么决定了你需要通用方法还是重载方法。
  • 最好的方法是继承你的返回类型(如果可能的话)或者:根本不。如果您有三种不同的返回类型,则三个单独的方法非常好。
  • AppConEnv 是否有任何关联?
  • “我有三个方法” 这不会编译,因为你对所有三个同名的方法调用都有相同的签名。

标签: c# generics overloading


【解决方案1】:

这可能是一个不错的小通用:

public static TOutput Get<TOutput>(this customobj data, string x)

请记住,在其背后实现一个使用工厂模式的类可能是最好的实现,但这完全取决于您。您可以轻松地打开类型名称并构建正确的类型。

使用它看起来像这样:

myCustomObj.Get<Con>("my x val");

【讨论】:

  • 你怎么称呼这个?我想语法看起来不会“很好”。
  • 泛型用于适应不同的数据类型。这将如何帮助将具有相同参数的不同功能组合在一起?
  • @kirkWoll 您可以通过显式传递类型参数来调用它:Get(data, x)
  • @user2674389,他把它变成了一个扩展方法,如果你还必须传入被扩展对象的类型,这会很混乱。
  • Eric Lippert 说的是什么?每当您在通用方法中打开 TYPE 时,您的代码可能有问题?虽然您的解决方案确实有效,但也许它不是解决此设计问题的最佳方法。
【解决方案2】:

您的问题的简单答案是没有最好的方法。除非所有三个中的代码都是相同的(不太可能因为它们返回三种不同的类型),否则将它们保留为三种方法,因为任何将它们组合成一个的尝试都会使代码更混乱,更难阅读,因此更难维护。此外,给他们更好的名字,描述每个人的工作。至少,类似于:

public App GetApp(customobj data, string x)
{
    ...
}

public Con GetCon(customobj data, string x)
{
    ...
}

public Env GetEnv(customobj data, string x)
{
    ...
}

【讨论】:

  • 很抱歉问题如此开放..是的,它们不会相同..它们的表现会有所不同......是的,当我尝试合并它们时,实现变得更加混乱..所以想问我是否可以解决它......无论如何,谢谢我会保持它们的原样......
【解决方案3】:

据我了解您的问题。你可以创建一个类

Public parameter
{
   App app;
   Con con;
   Env env;
}
public parameter Get(customobj data, string x)
{
    parameter _pobj=new parameter();
    //you can add the result here if you want or else return null.
    _pobj="somehting1";
    _pobj="somthing2";
    _pobj="somthing3";

    return _pobj;
}

您可以通过说 _pobj.env 或提到的参数在不同的调用中收集它们

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多