C# 从外部设置基类属性

C# 从外部设置基类属性,c#,design-patterns,C#,Design Patterns,我希望在派生类中使用基类属性。另外,我必须从外部传递属性值。我可以想到以下两种方法: 方法1: class Mydata { } class Converter1:Converter { void Converter1(Mydata data1) { data = data1; } public void Convert() { // USING "data" here } } class Converter2 :

我希望在派生类中使用基类属性。另外,我必须从外部传递属性值。我可以想到以下两种方法:

方法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()
哪种方法更好?还是其他更好的方法?

忽略“转换器”的奇异性

“共享更多代码和封装数据更好”:通常,如果需要设置基类的属性,可以通过基类构造函数进行设置:

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...
}

你对“更好”的标准是什么?更具可读性?(请注意,您的示例有些奇怪,因为人们可能希望
Convert
方法至少返回转换结果,并且可能需要一些输入…)我将把您的数据作为参数传递给Convert方法。将其传递给构造函数意味着转换器是一种用途,如果您无法更改转换调用中的数据,它将成为一个非常严格的对象。第二种方法肯定是不正确的(IMO),因为它允许用户调用
Convert
方法,而不必设置
data
属性,很可能导致错误。