gpt4 book ai didi

c# - 使用派生类构造函数设置基类属性

转载 作者:行者123 更新时间:2023-11-30 17:03:30 25 4
gpt4 key购买 nike

我正在从派生类设置基类的属性,如下所示:

public abstract class Coverter
{
public Mydata data { get; set; }
public abstract void Convert();

}
public class Mydata
{
public int i;
}
public class Coverter1 : Coverter
{
public Coverter1(Mydata data1)
{
data = data1;
}

public override void Convert()
{
Console.WriteLine(data.i.ToString());

}
}

private static void Main(string[] args)
{
Mydata data = new Mydata();
data.i = 5;
Coverter c = new Coverter1(data);
c.Convert();
Console.ReadLine();
}

这种实现有什么缺陷吗?什么是更好的方法?

我可以用下面的方法做同样的事情。

public abstract class Coverter
{
public Mydata data { get; set; }
public abstract void Convert();

}

public class Mydata
{
public int i;
}
public class Coverter1:Coverter
{
override public void Convert()
{
Console.WriteLine(data.i.ToString());

}
}
static void Main(string[] args)
{
Mydata data1 = new Mydata();
data1.i = 5;
Coverter c = new Coverter1();
c.data = data1;
c.Convert();
Console.ReadLine();
}

哪种方法更好?

最佳答案

在构造函数中向下传递字段。 (注意:通常您应该命名字段以小写字母开头,属性以大写字母开头)。这是我修复命名的示例。

public abstract class Converter
{
private readonly MyData data;
protected Converter(MyData data)
{
this.data = data;
}

public MyData Data { get { return data; } }
}

public class MyData
{
private readonly int value;
public MyData(int value)
{
this.value = value;
}

public int MyValue { get { return value; } }
}

public class Converter1 : Converter
{
public Converter1()
: base(new MyData(5))
{
}
}

我推荐只对属性使用只读字段和 getter 的做法。这样做将使您的类型不可变,这通常有助于使您的程序一开始就正确。从不可变开始,然后在需要的地方引入可变性,并且只在需要时引入。让类型像这样不可变需要通过构造函数传递值。

关于c# - 使用派生类构造函数设置基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18506166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com