在构造函数中,“this”关键字的作用是什么?

17

我刚才在MSDN上查看了示例代码,发现了:

namespace IListSourceCS
{
    public class Employee : BusinessObjectBase
    {
        private string      _id;
        private string      _name;
        private Decimal     parkingId;

        public Employee() : this(string.Empty, 0) {} // <<--- WHAT IS THIS???
        public Employee(string name) : this(name, 0) {}
4个回答

16

它调用该类中具有该签名的另一个构造函数。这是一种利用其他构造函数实现构造函数的方式。base 也可以用于调用基类构造函数。你必须拥有与其签名匹配的构造函数才能让它起作用。


MS代码覆盖测试对此有抱怨。你知道如何为它编写单元测试吗? - Tun
2
@coder 抱歉,我从未使用过 MS 代码覆盖率,并且如果没有更多关于问题的详细信息,我甚至无法猜测问题是什么。 - Craig Suchanec

8

这个让你调用当前类的另一个构造函数,带有(string,int)参数。

这是一种初始化对象的技术,称为构造函数链式调用


3

这个示例可能对一些不同的派生有所帮助...当实例被创建时,第一个显然具有两个构造方法...例如

FirstClass oTest1 = new FirstClass();

或者

FirstClass oTest1b = new FirstClass(2345);

第二个类是从FirstClass派生而来的。请注意它也有多个构造函数,但其中一个有两个参数...这个带有两个参数的签名将调用第二个类的"this()"构造函数...该构造函数反过来使用整数参数调用基类(FirstClass)构造函数...
因此,在创建派生自其他类的类时,可以引用其自己的类构造方法或其基类...同样,在代码中如果覆盖方法,可以在基()方法之外做一些额外的事情...
可能比你感兴趣的更多,但也许这个澄清对其他人有帮助...
   public class FirstClass
   {
      int SomeValue;

      public FirstClass()
      { }

      public FirstClass( int SomeDefaultValue )
      {
         SomeValue = SomeDefaultValue;
      }
   }


   public class SecondClass : FirstClass
   {
      int AnotherValue;
      string Test;

      public SecondClass() : base( 123 )
      {  Test = "testing"; }

      public SecondClass( int ParmValue1, int ParmValue2 ) : this()
      {
         AnotherValue = ParmValue2;
      }
   }

在你的例子中,如果你去掉了对this()的调用,那么基类的构造函数就不会执行了吗? - Aaron Anodide
@Gabriel,不过,如果我有其他构造函数需要调用同一个类的话,我会使用相应的参数...就像原帖中强制调用空字符串和零值一样... - DRapp

-1

构造函数是一种特殊的方法/函数,用于初始化基于类创建的对象。这是您运行初始化操作的地方,例如设置默认值,以所有方式初始化成员。

"this"是一个特殊的单词,指向您所在的对象。将其视为对象内部使用的对象引用,用于访问内部方法和成员。

请查看以下链接:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接