加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用重载的构造函数重构类

发布时间:2020-12-15 23:52:51 所属栏目:百科 来源:网络整理
导读:我有一个带有重载构造函数的类(C#)它可以用很少的方式初始化,有些参数是可选的 – 所以在结果中 – 有一堆令人困惑的构造函数 new Object(StrA,StrB,ObjA)new Object(StrA,StgB,ObjB,StrC)new Object(StrA,ObjA,StrD)new Object(StrA,StrC,StrE,ObjB)new Obj
我有一个带有重载构造函数的类(C#)它可以用很少的方式初始化,有些参数是可选的 – 所以在结果中 – 有一堆令人困惑的构造函数

new Object(StrA,StrB,ObjA)
new Object(StrA,StgB,ObjB,StrC)
new Object(StrA,ObjA,StrD)
new Object(StrA,StrC,StrE,ObjB)
new Object(StrA,StrD)

我看到两种改善情况的方法
a)创建一个结构来保存可选参数

new Config(StrA,StrD,StrE) 
new Object(Config,ObjA)
new Object(Config,StrC)

b)将可选参数设置为属性

A = new Object(ObjA)
A.StrA = some;
A.StrB = some;
A.StrD = some;
A.StrE = some;

哪种方式最好?

并且这样的代码重构是必要的 – 前面的代码维护者说“虽然使用了intellisense,构造函数的复杂性无关紧要 – 总是可以检查提示并选择正确的提示”

解决方法

是的,我会重构这个. IntelliSense只是非常有用,并且盯着一个5参数构造函数,该构造函数需要3个看似随机的字符串,试图找出哪一个意味着什么不会提高代码可读性.在VB(或C#4.0)中,我仍然使用构造函数,但使用命名参数.对于C#3.0,我将创建一个单独的类来保存初始化信息:

class ObjectSettings
{
    public string StrA { get; set; }
    public string StrB { get; set; }
    ...
    public string ObjA { get; set; }
    public string ObjB { get; set; }
}

然后在构造函数中获取该类型的单个参数:

class Object
{
    public Object(ObjectSettings settings);
}

并在调用时使用对象初始值设定项:

new Object(new ObjectSettings { StrA = ...,StrB = ...,ObjA = ... })

与仅在Object中具有属性相比,这种模式的主要优点是,该模式保证了Object一旦构造就会被正确初始化.对于对象本身的属性,它将处于无效状态,直到客户端正确设置它们,并且您必须在几乎每次调用时验证它.

此模式实际上在.NET FCL中使用 – 有关它的示例,请参阅XmlReader / XmlReaderSettings.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读