簡體   English   中英

C#6.0至<6.0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM