[英]C# 6.0 to < 6.0
我需要將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
中獲得必須降級的解決方案。
您將必須在構造函數中分配屬性。
選項1-具有私人二傳手的財產:
class Example
{
public ImageCollection Strokes { get; private set; }
public Example()
{
Strokes = new ImageCollection();
}
}
選項2-僅具有吸氣劑的屬性,由私有只讀字段支持:
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();
}
這是不一樣的。
在第一個示例中,您具有一個將通過構造函數實例化的屬性。
在第二個示例中,每次訪問屬性時,您都會返回一個新實例。
正確的重構如下所示:
public ImageCollection Strokes
{
get; private set;
}
public constructor()
{
Strokes = new ImageCollection();
}
您可以創建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();
}
}
只需記住在類的所有構造函數中對其進行初始化,或者至少讓您的其他構造函數調用該構造函數即可。
解決方案的問題在於,每次調用get
,它都會返回ImageCollection
的新實例。 這產生了彼此無關的多個。 換一個不會改變其余的。
我不知道您會遇到什么問題,但是更改代碼(如下面的代碼)總是創建新對象, 但是6.0一次初始化嘗試
var imgCollection = new ImageCollection();
public ImageCollection Strokes
{ get { return imgCollection; } } //< 6.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.