2016-08-02 78 views
1

我需要將C# 6.0中的以下代碼轉換爲適用於.NET Framework 4.5的較低版本。C#6.0 to <6.0

public ImageCollection Strokes { get; } = new ImageCollection(); //C# 6.0 

我該如何轉換?

嘗試了下面的代碼,但在應用程序中幾乎沒有問題。

public ImageCollection Strokes 
     { get { return new ImageCollection(); } } //< 6.0 

請幫忙。還有什麼辦法來轉換這些?我經常在6.0中得到解決方案,我必須降級。

+0

我會在構造函數 – MichaelMao

回答

3

它不一樣。

在第一個示例中,您有一個將通過構造函數實例化的屬性。

在第二個示例中,每次訪問屬性時都會返回一個新實例。

正確的重構是這樣的:

public ImageCollection Strokes 
{ 
    get; private set; 
} 

public constructor() 
{ 
    Strokes = new ImageCollection(); 
} 
+1

中做到這一點謝謝,工作。一旦SO允許,將會標記 – iamCR

0

我不知道你編曲面對的問題,但改變像下面 代碼總是創建新的對象代碼,但6.0一次初始化 嘗試

var imgCollection = new ImageCollection(); 

public ImageCollection Strokes 
    { get { return imgCollection; } } //< 6.0 
3

你將不得不分配屬性在你的構造函數中。

選項1 - 帶私人二傳手的屬性:像選項 - : -

class Example 
{ 
    public ImageCollection Strokes { get { return _strokes; } } 

    private readonly ImageCollection _strokes; 

    public Example() 
    { 
     _strokes = new ImageCollection(); 
    } 
} 

選項3吸氣劑只,由私人只讀字段支持的屬性

class Example 
{ 
    public ImageCollection Strokes { get; private set; } 

    public Example() 
    { 
     Strokes = new ImageCollection(); 
    } 
} 

選項2 2,但分配字段內聯,而不是在構造函數中:

class Example 
{ 
    public ImageCollection Strokes { get { return _strokes; } } 

    private readonly ImageCollection _strokes = new ImageCollection(); 
} 
1

您可以創建一個私有字段吸氣劑用途:

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(); 
    } 
} 

只記得類的所有構造函數來初始化它,或者至少有另一個構造函數調用構造函數,做。


與解決方案的問題是,它返回的每一次ImageCollectionget一個新的實例被調用。這產生了多個彼此沒有任何關係。改變一個不會改變其餘的。