Effective C# Item14: Utilize Constructor Chaining
2006-10-13 09:08
351 查看
Effective C# Item14: Utilize Constructor Chaining
当我们写类的构造函数的时候经常会有许多种重载版本,它们完成的工作有一部分是重复的。许多开发者往往是先写第一个构造函数,然后拷贝粘贴它们到其他的构造函数当中去。我们应当停止这种做法。当我们发现许多重载的构造函数都包含有一些普遍的算法时,我们应当将这些逻辑集合到构造函数中,形成构造函数链。通过这种方法我们可以避免代码重复,生成更加高效的对象代码。
构造函数初始化允许一个构造函数调用其他构造函数。下面的例子展示了一个简单的应用。
public class MyClass
public class MyClass
public class MyClass
public class MyClass
public class MyClass
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 initialCount) cil managed
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 initialCount,
string name) cil managed
使用构造函数调用一般函数方法生成的IL:
这是MyClass(int initialCount, string name),注意IL_0001
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 initialCount,
string name) cil managed
.method private hidebysig instance void commonConstructor(int32 initialCount,
string name) cil managed
可以看到当我们使用构造函数链调用构造函数的重载时并不会马上生成类型的对象,这个动作是在基础构造器中完成的。而当我们使用构造函数调用一般函数时,会在构造函数结束前生成类型的对象,然后再调用函数。这样不但会使中间代码臃肿,还会降低执行的效率。
回到目录
当我们写类的构造函数的时候经常会有许多种重载版本,它们完成的工作有一部分是重复的。许多开发者往往是先写第一个构造函数,然后拷贝粘贴它们到其他的构造函数当中去。我们应当停止这种做法。当我们发现许多重载的构造函数都包含有一些普遍的算法时,我们应当将这些逻辑集合到构造函数中,形成构造函数链。通过这种方法我们可以避免代码重复,生成更加高效的对象代码。
构造函数初始化允许一个构造函数调用其他构造函数。下面的例子展示了一个简单的应用。
public class MyClass
public class MyClass
public class MyClass
public class MyClass
public class MyClass
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 initialCount) cil managed
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 initialCount,
string name) cil managed
使用构造函数调用一般函数方法生成的IL:
这是MyClass(int initialCount, string name),注意IL_0001
.method public hidebysig specialname rtspecialname
instance void .ctor(int32 initialCount,
string name) cil managed
.method private hidebysig instance void commonConstructor(int32 initialCount,
string name) cil managed
可以看到当我们使用构造函数链调用构造函数的重载时并不会马上生成类型的对象,这个动作是在基础构造器中完成的。而当我们使用构造函数调用一般函数时,会在构造函数结束前生成类型的对象,然后再调用函数。这样不但会使中间代码臃肿,还会降低执行的效率。
回到目录
相关文章推荐
- Item 14:Utilize Constructor Chaining
- Effective C#之14:Utilize Constructor Chaining
- Item 15: Utilize using and try/finally for Resource Cleanup(Effective C#)
- 《Effective C#》Item 14:使用构造函数初始化语句
- Effective C#之Item 42:Utilize Attributes to Simplify Reflection
- Item 14: Minimize Duplicate Initialization Logic(Effective C#)
- 《Effective C#》Item 14:使用构造函数初始化语句
- Effective C#之Item 38:Utilize and Support Data Binding
- Item 1: Use Properties Instead of Accessible Data Members(Effective C#)
- Item 7: Understand the Pitfalls of GetHashCode()(Effective C#)
- Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
- Item 18: Distinguish Between Value Types and Reference Types(Effective C#)
- Item 34: Avoid Overloading Methods Defined in Base Classes(Effective C#)
- Item 37: Construct Parallel Algorithms with Exceptions in Mind(Effective C#)
- Item 14 资源管理类的拷贝
- Extjs 出现 c is not a constructor 与 item is n
- 《Effective C#》Item 13:使用静态构造函数初始化静态成员
- 《Effective C#》Item 10:小心GetHashCode函数所存在的陷阱 (转)
- Effective C#:ITEM3:优先使用is或者as操作符而不是强制转换
- 《Effective C#》Item 7:推荐使用不可改变的原子值类型