`
hyshucom
  • 浏览: 811742 次
文章分类
社区版块
存档分类
最新评论

关于C# this 指针

 
阅读更多
This关键字的另一种用法是使用一项名为构造函数链的技术来设计类。当定义了多个构造函数时,这个设计模式就会很有用。由于构造函数通常会验证传入的参数来强制各种业务规则,所以在类的构造函数集合中经常会找到冗余的验证逻辑。考虑如下更新后的Motocycle
Class Motorcycle
{
Public int driverIntensity;
Public string driverName;
Public Motorcycle()
{}
//冗余的构造函数逻辑
Public Motorcycle(int intensity)
{
If(intensity > 10)
{
Intensity = 10;
}
driverIntensity = intensity;
}
Public Motorcycle(int intensity,string name)
{
If(intensity>10)
{
Intensity = 10;
}
driverIntensity = intensity;
driverName = name;
}
……
}
在这里,每一个构造函数确保强度等级不超过10。虽然可以这么做,但是在两个构造函数中有冗余代码语句。这不够完美,如果规则改变的话,就必须在多个位置更新代码。
改进这种情况的一个方法就是在Motocycle类中定义一个用来验证传入参数的方法。如果这么做的话,每一个构造函数就可以进行字段赋值之前调用这个方法。虽然这个方法确实可以隔离在业务规则改变时需要修改的代码,但是我们就会面临如下的冗余:
class Motorcycle
{
public int driverIntensity;
public string driverName;
//构造函数
Public Motorcycle()
{}
Public Motorcycle(int intensity)
{
SetIntensity(intensity);
}
Public Motorcycle(int intensity,string name)
{
SetIntensity(intensity);
driverName = name;
}
Public voidSetIntensity(int intensity)
{
If(intensity >10)
{
Intensity = 10;
}
driverIntensity = intensity;
}
……
}
一个更简洁的方案就是,让一个接受最多参数个数的构造函数做“主构造函数”,并且实现必须的验证逻辑。其余的构造函数可以使用this关键字把传入的参数转发给主构造函数,并且提供所有必须的其他参数。这样,整个类中只会有一个构造函数需要我们去操心,其余构造函数基本是空的。
下面是Motorcycle类的最后一次迭代。在串联构造函数时,请注意this如何在构造函数本身的作用域之外“躲开”构造函数的声明:
class Motorcycle
{
public int driverIntensity;
public string driverName;
//构造函数
public Motorcycle(){}
public Motorcycle(int intensity):this(intensity,””){}
public Motorcycle(string name):this(0,name){}
//这是做所有工作的“主”构造函数.
Public Motorcycle(int intensity,string name)
{
If(intensity>10)
{
Intensity = 10;
}
driverIntensity = intensity;
driverName = name;
}
……
}
需要理解的是,使用this关键字串联构造函数不是强制的。但如果使用这项技术,类定义就会更容易维护、更简明。再说一次,使用这项技术可以简化编程任务,因为真正的工作都交给了一个构造函数来做,而其他构造函数只是在“踢皮球”。
分享到:
评论

相关推荐

    C#this指针用法

    简单介绍了C#中this指针的用法。

    C#中this指针的用法示例

    本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体内容如下: 一、this指针是什么: 这里有一些面向对象编程的概念需要说明:类(Class)的概念和对象(Object)的概念 类是对事物概括,...

    C#中this方法的一些问题

    C#中this方法的一些问题,this关键字引用被访问成员所在的当前实例。静态成员函数没有this指针。this关键字可以用来从构造函数,实例方法和实例化访问器中访问成员。

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    C#5.0本质论第四版,高清扫描的,对C#5.0技术讲的比较详细,第1章 C#概述 1 1.1 Hello,World 1 1.2 C#语法基础 3 1.2.1 C#关键字 3 1.2.2 标识符 4 1.2.3 类型定义 5 1.2.4 Main 6 1.2.5...

    在一小时内学会 C#(txt版本)

    接下来关于 C# 的讨论主题: ? 编程结构 ? 命名空间 ? 数据类型 ? 变量 ? 运算符与表达式 ? 枚举 ? 语句 ? 类与结构 ? 修饰符 ? 属性 ? 接口 ? 函数参数 ? 数组 ? 索引器 ? 装箱与拆箱 ? 委托 ? 继承与多态 以下...

    微软C#语言规范,C#语言教程中文版

    10.3.8.4 this 访问 283 10.3.8.5 对包含类型的私有和受保护成员的访问 284 10.3.8.6 泛型类中的嵌套类型 285 10.3.9 保留成员名称 286 10.3.9.1 为属性保留的成员名称 286 10.3.9.2 为事件保留的成员名称 287 10.3....

    C#实训教程

    14.7 this 关键字 292 14.8 控件概念 292 14.9 各种类型控件 292 14.10 控件的一些通用属性 294 14.11 标签、文本框、按钮控件简介 295 14.12 列表框控件简介 296 14.13 复选列表框 296 14.14 组合框 296 ...

    C# for CSDN 乱七八糟的看不懂

    C#关键字 关键字 abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach ...

    C#教程(语言规范)

    7.6.7 this 访问 147 7.6.8 base 访问 148 7.6.9 后缀增量和后缀减量运算符.. 148 7.6.10 new 运算符 ... 149 7.6.10.1 对象创建表达式 ... 149 7.6.10.2 对象初始值设定项 . 150 7.6.10.3 集合初始值设定项 ....

    C#语言规范(2.0,3.0,4.0合集)

    这个是C#语言规范2.0,3.0,4.0的合集,是关于 C# 语法的权威资料。它们包含该语言各个方面的详细信息,包括 Visual C# 产品文档未涉及的许多语法点。 4.0目录 1. 简介 1 1.1 Hello world 1 1.2 程序结构 2 1.3 ...

    c# program

    60. 除非在构造函数中调用其他构造函数否则不要使用this指针。 // 正确使用this的例子 public class MyClass { public MyClass(string message ) {} public MyClass() : this("hello") {} } ...

    C# 自定义窗体的最大化、最小化和关闭按钮

    //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否按下 创建该窗体 MouseDown、MouseMove、MouseUp事件的相应处理程序 private void Form1_MouseDown(object sender, System.Windows....

    C++入门经典(第9版) ([美]Walter Savitch著) 中文pdf完整扫描版[302MB]

    第1章 计算机和C++编程入门 第2章 C++基础知识 第3章 更多的控制流程 第4章 过程抽象和返回值的函数 第5章 所有子任务的函数 第6章 I/O流:对象和类入门 ...附录7 this指针 附录8 将操作符重载为成员操作符

    QQ好友列表控件_C#

    QQ好友例表控件 带实例...//this.ListBox1.Items.Insertat(3,new ListItem("插入在第3行之后项","")); //this.ListBox1.Items.Insertat(index,ListItem) //ListBox1.Items.Insert(0,new ListItem("text","value"));

    C#编程经验技巧宝典

    24 <br>0050 using关键字的用法 24 <br>0051 变量的作用域 25 <br>2.5 其他 26 <br>0052 有效使用this对象 26 <br>0053 如何声明变量 26 <br>0054 如何声明相同类型的多个变量 26 ...

    超级实用:输出客户端代码实现特殊功能的方法asp.net C# JScript 常用方法大全.

    /// 当前页面指针,一般为this /// 提示信息 public static void MessageBox(System.Web.UI.Page page, string msg) { page.ClientScript.RegisterStartupScript(typeof(string), "message", "$(document)....

    微软 C#语言参考 CHM格式

    7.5.7 This访问... 110 7.5.8 基本访问... 111 7.5.9 递增和递减后缀操作符... 111 7.5.10 new操作符... 112 7.5.11 typeof操作符.. 116 7.5.12 sizeof操作符... 116 7.5.13 checked和unchecked操作符.. 117 7.6 ...

    设计一个学生类Student(学生学号、姓名、数学、英语、计算机成绩;)

    1.设计一个学生类Student。 1)数据成员包括: 学生学号、姓名、数学、英语、c语言成绩;...5)熟悉this指针,测试什么样的成员函数有this指针,什么样的成员函数没有this指针。 6)借助student类验证常对象、常成员以及

Global site tag (gtag.js) - Google Analytics