2013-08-29 70 views
0

我想在派生类中使用基类属性。另外,我必须从外部传递属性值。我认为以下两种方法之一:从外部设置基类属性

方法1:

class Mydata 
{ 

} 
class Converter1:Converter 
{ 
    void Converter1(Mydata data1) 
    { 
     data = data1; 
    } 
    public void Convert() 
    { 
     // USING "data" here 
    } 
} 

class Converter2 : Converter 
{ 
    void Converter2(Mydata data2) 
    { 
     data = data1; 
    } 
    public void Convert() 
    { 

      //USING "data" here 

    } 
} 

当创建我可以创建类似以下对象:

Mydata data1 =new Mydata() 
    Mydata data2 =new Mydata() 
    Coverter cObj= Converter1(data1) 
    cObj.Convert() 
    Coverter cObj1= Converter2(data2) 
    cObj1.Convert(); 

方法2:

class Mydata 
{ 

} 
class Covnerter1:Converter 
{ 
    public void Convert() 
    { 
     // USING "data" here 
    } 
} 

class Converter2 : Converter 
{ 

    public void Convert() 
    { 
     // USING "data" here 

    } 
} 

在创建对象时,我可以像下面那样创建对象,并在基类中设置属性值。

Mydata data1 =new Mydata() 
    Mydata data2 =new Mydata() 
    Coverter cObj= Converter1() 
    cObj.data = data1; 
    cObj.Convert() 
    Coverter cObj1= Converter2() 
    cObj1.data =data2 
    cObj1.Convert() 

哪种方法更好?还是有其他更好的方法?

+0

什么是您的“更好”的标准?更可读? (请注意,你的示例有点奇怪,因为人们可能期望'Convert'方法至少返回转换结果,并且可能需要一些输入...) –

+0

我会将数据作为参数传递给convert方法。将它传递给构造函数意味着转换器是一种用法,如果您无法将调用中的数据更改为Convert,它将变成一个非常僵硬的对象。 – stevepkr84

+0

第二种方法绝对不正确(IMO),因为它允许用户调用'Convert'方法而不设置'data'属性,这很可能导致错误。 – dcastro

回答

1

忽略的“转换器”陌生感......

来讲“为分享更多的代码和数据封装好”:通常,如果您需要设置基类的属性,您可以通过基类构造函数做到这一点:

class Base 
{ 
    public MyData { get; private set; } 
    public Base(MyData data) 
    { 
     MyData = data; 
    } 
} 

class Derived : Base 
{ 
    public Derived(MyData data):base(data) 
    {} 

    // Methods that use MyData here... 
}