c# – 具有复杂逻辑的多个构造函数
发布时间:2020-12-15 18:21:13 所属栏目:百科 来源:网络整理
导读:在C#中,如果你有多个构造函数,你可以这样做: public MyClass(Guid inputId,string inputName){ // do something}public MyClass(Guid inputId): this(inputId,"foo") {} 这个想法当然是代码重用.但是,当需要一些复杂的逻辑时,最好的方法是什么?说我想要这
在C#中,如果你有多个构造函数,你可以这样做:
public MyClass(Guid inputId,string inputName){ // do something } public MyClass(Guid inputId): this(inputId,"foo") {} 这个想法当然是代码重用.但是,当需要一些复杂的逻辑时,最好的方法是什么?说我想要这个构造函数: public MyClass(MyOtherClass inputObject) { Guid inputId = inputObject.ID; MyThirdClass mc = inputObject.CreateHelper(); string inputText = mc.Text; mc.Dispose(); // Need to call the main Constructor now with inputId and inputText } 需要注意的是,我需要创建一个在使用后必须处理的对象. (澄清:不是立即,但我必须调用Dispose()而不是等待垃圾收集) 但是,如果我在重载的构造函数中添加一些代码,我没有看到再次调用基础构造函数的方法.有没有办法从一个重载的内部调用基础构造函数? 或者是否可以使用 public MyClass(MyOtherClass inputObject): this(inputObject.ID,inputObject.CreateHelper().Text) {} 这会自动从CreateHelper()中释放生成的对象吗? 编辑:谢谢到目前为止.两个问题:我不控制MyOtherClass,我没有扩展方法(只有.NET 3.0 ……).我确实控制了自己的类,因为我刚刚开始编写它,如果有一个好的方法,我没有问题重构构造函数. 解决方法
用于解决此问题的最常见模式是使用构造函数调用的Initialize()方法,但在您刚刚给出的示例中,添加一个您调用的静态方法,就像下面的代码一样,可以解决这个问题.
public MyClass(MyOtherClass inputObject): this(inputObject.ID,GetHelperText(inputObject) {} private static string GetHelperText(MyOtherClass o) { using (var helper = o.CreateHelper()) return helper.Text; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |