我需要将C# 6.0
中的以下代码转换为适用于.NET framework 4.5的较低版本。
public ImageCollection Strokes { get; } = new ImageCollection(); //C# 6.0
我该怎么转换呢?
尝试了以下代码,但在应用程序中几乎没有问题。
public ImageCollection Strokes
{ get { return new ImageCollection(); } } //< 6.0
请帮助。还有什么方法可以转换这些?通常我会在6.0
中获得解决方案,我必须降级。
答案 0 :(得分:3)
您将不得不在构造函数中分配属性。
选项1 - 具有私人设定者的属性:
class Example
{
public ImageCollection Strokes { get; private set; }
public Example()
{
Strokes = new ImageCollection();
}
}
选项2 - 仅具有getter的属性,由私有只读字段支持:
class Example
{
public ImageCollection Strokes { get { return _strokes; } }
private readonly ImageCollection _strokes;
public Example()
{
_strokes = new ImageCollection();
}
}
选项3 - 与选项2类似,但是在内联而不是在构造函数中指定字段:
class Example
{
public ImageCollection Strokes { get { return _strokes; } }
private readonly ImageCollection _strokes = new ImageCollection();
}
答案 1 :(得分:3)
它不一样。
在第一个示例中,您有一个将通过构造函数实例化的属性。
在第二个示例中,每次访问该属性时都会返回一个新实例。
正确的重构看起来像这样:
public ImageCollection Strokes
{
get; private set;
}
public constructor()
{
Strokes = new ImageCollection();
}
答案 2 :(得分:1)
您可以创建getter使用的私有字段:
class MyClass
{
private ImageCollection _strokes = new ImageCollection();
public ImageCollection Strokes { get { return _strokes } }
}
或者你可以在构造函数中初始化它。
class MyClass
{
public ImageCollection Strokes { get; private set; }
public MyClass()
{
Strokes = new ImageCollection();
}
}
请记住在类的所有构造函数中初始化它,或者至少让其他构造函数调用构造函数。
您的解决方案的问题是,每次调用ImageCollection
时,它都会返回get
的新实例。这产生了多个彼此无关的东西。换一个不会改变其余部分。
答案 3 :(得分:0)
我不知道你面临的问题,但改变代码如下 您的代码始终创建新对象,但6.0一次初始化 试试
var imgCollection = new ImageCollection();
public ImageCollection Strokes
{ get { return imgCollection; } } //< 6.0