在C#中this用来指代当前对象,用于当成员函数中的形参名跟成员变量名一致时,进行区分。

  但this不仅仅只有这一作用,this还可以如下这样用:

    class class1
{
private int i_a;
private string s_a; public class1()
{
i_a = 0;
s_a = "default";
} public class1(int i_a)
{
if (i_a > 5 && i_a < 10)
{
this.i_a = i_a;
}
s_a = "defalt";
} public class1(string s_a)
{
this.i_a = 0;
this.s_a = s_a;
}
public class1(int i_a, string s_a)
{
if (i_a > 5 && i_a < 10)
{
this.i_a = i_a;
}
this.s_a = s_a;
} public void print()
{
Console.WriteLine("i_a = {0}", i_a);
Console.WriteLine("s_a = {0}", s_a);
}
}

注意到,这个对成员变量i_a的值的鉴定操作在第2跟第4个构造函数中重复了两次,如果这个操作复杂一点,这样的变量多一点,那重复代码就大大增加,影响了代码的维护性,一旦这个操作规则变化了,改动起来就比较麻烦,所以好的方法当然是将这个鉴定操作提取出来,放到一个单独的函数中,然后统一调用,不过C#还提供了这样一种机制来,如下:

    class class1
{
private int i_a;
private string s_a; public class1()
{
i_a = 0;
s_a = "default";
} public class1(int i_a):this(i_a,"default"){} public class1(string s_a):this(0,s_a){} public class1(int i_a, string s_a)
{
if (i_a > 5 && i_a < 10)
{
this.i_a = i_a;
}
this.s_a = s_a;
} public void print()
{
Console.WriteLine("i_a = {0}", i_a);
Console.WriteLine("s_a = {0}", s_a);
}
}

另外,this还可以用在索引器中。

.NET/C# 类构造函数中this的用法 (转)的更多相关文章

  1. 记c#中构造函数中this的用法

    今天谈及这个话题,是因为在看别人代码,遇到的.本着知其然还要知其所以然的精神,在网上大肆查找了一遍.得到了一些答案.并在此做一个简单的笔记,以便自己和他人以后查找,与我一同成长进步. 在C#中this ...

  2. 基础学习:关于this在派生类构造函数中的理解

    https://www.cnblogs.com/Bear-Study-Hard/archive/2006/01/09/313551.html 看了上面这篇文章有感,特做了个小样板,以加深对于this在 ...

  3. This 在构造函数中的固定用法

    class Person{ String name; int age; char gender; public Person (String name){ this.name = name; } pu ...

  4. WorldWind源码剖析系列:BMNG类构造函数深入分析

    BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...

  5. C# 构造函数中调用虚方法的问题

    请看下面代码: using System; public class A{ public A(){ M1(); } public virtual void M1(){} } public class ...

  6. C++语言笔记系列之十三——派生类构造函数的调用

    1.派生类构造函数的调用 (1)一个基类的全部数据成员均被派生类继承.创建一个派生类对象时.系统在为派生类对象分配单元时一定要为其基类数据成员分配子空间. (2)一个派生类对象在创建时不仅要调用派生类 ...

  7. c++ 派生类的构造函数 与 基类构造函数的关系

    <面向对象程序设计基础(第二版>李师贤等,第254页:C++语言的基本规则是:创建一个派生类的对象时,如果基类带有构造函数,则先调用基类的构造函数,然后才调用派生类的构造函数. <T ...

  8. C#中派生类调用基类构造函数用法分析

    这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  9. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

随机推荐

  1. C#中配置文件的使用

    1. 向项目添加app.config文件: 右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”:如果项目以前没有配置文件,则默认的文件名称为“app ...

  2. Android-xUtils框架介绍(四)

    今天介绍xUtils的最后一个模块——HttpUtils,拖了那么久,终于要结束了.另外,码字不易,如果大家有什么疑问和见解,欢迎大家留言讨论.HttpUtils是解决日常工作过程中繁杂的上传下载文件 ...

  3. annotatedClasses和component-scan冲突吗

    annotatedClasses:配置在sessionFactory下面表示的是,哪些实体需要映射,代码如下: <bean id="sessionFactory" class ...

  4. struts2 package元素配置

    package 元素的所有属性及对应功能: Attribute Required Description name yes key to for other packages to reference ...

  5. 取出block所对应的hash值

    /**********************************************************************//** Gets the hash value of t ...

  6. UVa 1605 (构造) Building for UN

    题意: 有n个国家,要设计一栋长方体的大楼,使得每个单位方格都属于其中一个国家,而且每个国家都要和其他国家相邻. 分析: 紫书上有一种很巧妙的构造方法: 一共有2层,每层n×n.一层是每行一个国家,另 ...

  7. acdream LCM Challenge (最小公倍数)

    LCM Challenge Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Su ...

  8. Java [leetcode 14] Longest Common Prefix

    小二好久没有更新博客了,真是罪过,最近在看linux的东西导致进度耽搁了,所以今晚睡觉前怒刷一题! 问题描述: Write a function to find the longest common ...

  9. LINQ,EF联合查询join

    public object GetListAdmin() { //return db_C56.Admins //   .Where(a => a.Status != "D") ...

  10. WCF HTTPS配置

    昨天需要把做好的一个wcf服务发布到服务器站点下的一个虚拟目录中发布过程遇到了一个问题:服务器上的环境是https,因此需要多对配置文件修改于是在网上找啊找,遇到一个问题找一个问题,可是问题依然没解决 ...