首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免方法重载?

如何避免方法重载?
EN

Stack Overflow用户
提问于 2011-07-12 04:10:38
回答 4查看 193关注 0票数 5

我有以下情况:

一个构造函数接受6个值。它们中的一些有默认值,有些没有。

代码语言:javascript
复制
#pseudocode# Foo(int a, int b=2, int c=3, int d=4, int e=5, int f){}

我希望能够调用所有可能的组合,而不必总是编写所有6个参数。

代码语言:javascript
复制
#pseudocode# Foo f1 = new Foo(a=1, d=7, f=6);
#pseudocode# Foo f2 = new Foo(a=1, b=9, d=7, f=6);

除了使用方法重载(这将是乏味的)来做这件事之外,还有更优雅的解决方案吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-12 04:12:30

在C# 4中,有一些命名参数,请参见Named and Optional Arguments (C# Programming Guide)

这将导致

代码语言:javascript
复制
new Foo(a: 1, d: 7, f: 6);

另一种解决方案是使用您的默认值定义一个构造函数,并使用对象初始化器来设置值How to: Initialize Objects by Using an Object Initializer (C# Programming Guide)

代码语言:javascript
复制
new Foo()
{
    a = 1,
    d = 7,
    f = 6
};
票数 12
EN

Stack Overflow用户

发布于 2011-07-12 04:15:52

对命名参数使用以下内容:

代码语言:javascript
复制
Foo f1 = new Foo(a: 1, d: 7, f: 6);
Foo f2 = new Foo(a: 1, b: 9, d: 7, f: 6);

有关命名参数和可选参数的更多信息,请单击此处:

http://msdn.microsoft.com/en-us/library/dd264739.aspx#Y515

票数 1
EN

Stack Overflow用户

发布于 2011-07-12 04:16:17

我更喜欢重构而不是Parameter Object。类似于:

代码语言:javascript
复制
Foo f1 = new Foo (new FooParameters () { B = 7 })

并且您的FooParamaters类可以封装默认值:

代码语言:javascript
复制
public class FooParameters
{
     public int A { get; set; }
     public int B { get; set; }


     public FooParameters ()
     {
          A = 1;
          B = 2;
     }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6655915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档