博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转载]《Effective C#》Item 14:使用构造函数初始化语句
阅读量:2448 次
发布时间:2019-05-10

本文共 1458 字,大约阅读时间需要 4 分钟。

在写程序的时候,往往会出现为一个类型提供不同场景的构造函数,可能大多构造函数比较相似,而C#中又不允许缺省参数,因此构造函数的编写无疑是一个重复工作。但是使用CopyPaste来完成构造函数的编写,有时候很难达到统一,尤其是当成员发生变化的时候。因此比较常见的替换方法就是为构造函数提供一个统一的成员函数来完成初始化工作。

例如:

public class MyClass

{

private int _Age;

private string _Name;

public MyClass( string Name)

{

InitMember( Name, 20 );

}

public MyClass( string Name, int Age )

{

InitMember( Name, Age );

}

///

/// Init class members

///

///

///

private void InitMember( string Name, int Age )

{

_Age = Age;

_Name = Name;

}

}

不过,在C#中提供了更为简明的方法,就是在构造函数初始化语句中调用另一构造函数,那么上面的形式可以改写为如下这样。

public class MyClass

{

private int _Age;

private string _Name;

public MyClass( string Name):this( Name, 20 )

{

}

public MyClass( string Name, int Age )

{

_Age = Age;

_Name = Name;

}

}

对于这两者来说,执行效率没有太大差别,但从代码质量而言,后者要好很多,而且会使代码看起来更清晰。

其次,对于基类的调用。由于成员函数不能调用基类的构造函数,所以对于第一种编写就比较困难,后者就简单多了。

例如:

public class MyClass:BaseClass

{

private int _Age;

private string _Name;

public MyClass( string Name):this( Name, 20 )

{

}

public MyClass( string Name, int Age ):base( Name, Age )

{

_Age = Age;

_Name = Name;

}

}

这里要提的一点就是构造函数初始化语句,对于“this”或者“base”之类的调用只能有一个,不能并存。

最后,就是对于readonly常量的初始化,由于readonly常量只能通过成员初始化语句或者在构造函数中被修改,因此在成员函数中无法修改readonly常量,这也是构造函数初始化语句要比成员函数好的重要一个因素。

有了上面的说明,对于两者的对比,可以形成如下这个简单的对比表。

效率

代码结构

基类调用

静态成员初始化

构造函数初始化语句

一样

简明清晰

容易

可以

成员函数

比较清晰

比较麻烦

不能

(注:这里不提倡Copy/Paste方法来重复编写构造函数)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130516/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130516/

你可能感兴趣的文章
python概率编程_Python中的概率编程
查看>>
Python中的运算符和表达式
查看>>
读写csv文件python_用Python读写CSV文件
查看>>
python super_使用Python super()增强您的课程
查看>>
愚人节导入_愚人节Python恶作剧
查看>>
pycon_Pycon Canada –深入探讨SQLAlchemy会议
查看>>
正则表达式科学计数法_数据科学家的正则表达式
查看>>
sql基础_SQL基础
查看>>
一个工作表可以有两个事件吗_你有两个工作
查看>>
Raul的新机器学习书!
查看>>
客户细分_客户细分初学者指南
查看>>
django迁移和创建_创建Django Oscar初始数据迁移
查看>>
python熊猫图案_熊猫备忘单–适用于数据科学的Python
查看>>
python制作可视化图表_可视化数据–用python覆盖图表
查看>>
双耳节拍 枕头_枕头3-0-0不在
查看>>
我第一次使用matplotlib
查看>>
spark中遇到的问题_ScienceCluster遇到Spark
查看>>
输入/help获取更多指令_更多HTTP / 2新闻
查看>>
rodeo python_Rodeo 1.0:台式机上的Python IDE
查看>>
MongoDB和Python简介
查看>>