代码之家  ›  专栏  ›  技术社区  ›  F.P

C构造函数参数传递

  •  2
  • F.P  · 技术社区  · 14 年前

    我目前正在重新构造我的程序,使其更面向对象,并且我的对象的构造器有问题。

    所有的对象都存储在一个数据库中,这个数据库必须是人类可读的,所以我认为程序员最好直接传递一个对象的构造函数,即表或数据行,而对象将获得值本身。

    所以,我想做的是:

    public TestObject(Data.MyDataTable table) {
     // Some checks if the table is valid
     TestObject(table[0]);
    }
    
    public TestObject(Data.MyDataRow row) {
     // Some checks if the row is valid
     TestObject(row.Name, row.Value);
    }
    
    public TestObject(String name, String value) {
     // Some checks if the strings are valid
     _name = name;
     _value = value;
    }
    

    所以,如您所见,我希望有一种“构造函数链”,根据程序员如何调用它,值在每个步骤中都被传递和验证。我用我写的方式试过,但没用。

    Error 'TestObject' is a 'type' but is used like a 'variable'
    

    我也试过写作 this.TestObject(...) 但没有变化。

    Error 'TestObject' does not contain a definition for 'TestObject' and
    no extension method 'TestObject' accepting a first argument of type
    'TestObject' could be found
    

    我该怎么办?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Julien Hoarau    14 年前

    Constructor chaining 工作原理如下:

    public TestObject(Data.MyDataTable table) : this(table[0])
    {
    
    }
    
    public TestObject(Data.MyDataRow row) : this(row.Name, row.Value)
    {
    
    }
    
    public TestObject(String name, String value)
    {
     // Some checks if the strings are valid
     _name = name;
     _value = value;
    }
    
        2
  •  7
  •   Oded    14 年前

    chain constructors 这样地:

    public TestObject(Data.MyDataTable table) : this(table[0])
    {
    
    }
    
    public TestObject(Data.MyDataRow row) : this(row.Name, row.Value)
    {
    
    }
    
    public TestObject(String name, String value) 
    {
     // Some checks if the strings are valid
     _name = name;
     _value = value;
    }
    

    注:使用 this 关键字,用于指示当前对象,使用传递给一个构造函数的参数传递给链接的构造函数。