过载发生器

时间:2012-01-29 22:26:04

标签: c#

是否有应用程序或网站可以输入参数信息(类型和变量名称),默认值,并生成方法重载的所有组合?

我有一个类,构造函数可以在其中接受五个不同类型的参数。参数被映射到属性,其中没有一个具有公共setter。每个参数都有一个默认值。

我希望我的类能够为所有参数的各种组合重载构造函数(范围从无参数到五个参数的任何和所有组合)。为了使其更加混乱,其中一个参数可以作为特定类型或字符串传递,我希望各种重载组合能够将其考虑在内。

更新

我同意这种设计可能不是最好的。有问题的类是我以类似于WPF的DependencyProperty的PropertyMetadata类的方式使用的类。为属性支持分配值,并在此时传入元数据类的新实例。它迫使我的手创建这个级联的构造函数重载系列。例如:

private ModelProperty<UserModel, string> firstNameProperty =
  RegisterProperty(p => p.FirstName, new ModelPropertyMetadata(**** lots of overloads here ****));
public string FirstName
{
     get { return GetValue(firstNameProperty); }
     set { SetValue(firstNameProperty, value); }
}

也许这不是最好的设计。我可以将ModelPropertyMetadata扩展到描述特定重载的新类,但这似乎就像是将问题推到了其他地方。关于如何使这种设计更好的想法?

3 个答案:

答案 0 :(得分:5)

看看optional parameters - 这些应该可以帮助您避免多次重载,并且仍然提供多种方法来调用构造函数。这是.NET 4.0的一项功能。

答案 1 :(得分:2)

为什么不使用可选参数?

public MyClass(String myVar = null, Int32 v0 = 5, ...) { .. }

你可以这样打电话给你:

new MyClass(v0: 10);

答案 2 :(得分:0)

我不知道其中一个,但我可能建议您创建一个包含参数并具有默认逻辑的简单类型,并将该类型传递到您的类中,因为您的建议很难维护。