2017-07-28 64 views
2

有沒有辦法在c#中標記一個方法,以便它只能在構造函數中運行?基本上,我有我需要在構造函數中的基本列更新只讀字符串數組的負荷,所以我做了以下內容:你只能在構造函數中運行的方法

public CMSBlogContext(ICMSRelationshipContext relationshipContext) 
    { 
     _relationshipContext = relationshipContext; 
     ColumnNames.AddBaseColumns(ref _blogAuthorColumns); 
     ColumnNames.AddBaseColumns(ref _blogCardColumns); 
     ColumnNames.AddBaseColumns(ref _blogCategoryColumns); 
     ColumnNames.AddBaseColumns(ref _blogPageColumns); 
     ColumnNames.AddBaseColumns(ref _blogPostColumns); 
    } 

我想我可以通過列移動到一個單獨的整理這件事功能如下所示:

public CMSBlogContext(ICMSRelationshipContext relationshipContext) 
    { 
     _relationshipContext = relationshipContext; 
     AddBaseColumns(); 
    } 

    private void AddBaseColumns() 
    { 
     ColumnNames.AddBaseColumns(ref _blogAuthorColumns); 
     ColumnNames.AddBaseColumns(ref _blogCardColumns); 
     ColumnNames.AddBaseColumns(ref _blogCategoryColumns); 
     ColumnNames.AddBaseColumns(ref _blogPageColumns); 
     ColumnNames.AddBaseColumns(ref _blogPostColumns); 
    } 

但很明顯這抱怨只讀只能在構造函數中進行更新,那麼有沒有一種方法,使只能在構造函數中運行(或相當的方法,是有辦法將這些只讀更新放入不在構造函數中的方法,但只能在構造函數中運行)?

+1

問題在於:如果AddBaseColumns本身調用一個方法,該方法只由'AddCBaseColumns'調用,因此被構造函數*暗指*調用,該怎麼辦?你會如何標記最後的方法? – HimBromBeere

+0

沒有名爲'AddBaseColumns'的函數,創建一個名爲GetBaseColumns的對象,然後可以將其分配給構造函數中的東西。 – DavidG

+0

其驚人的問題。調查部分方法可能有助於 – Ramankingdom

回答

2

你可以做的一件事是使用一個基類,並把屬性。然後,你可以使用基類的構造函數來設置只讀,像這樣的字段:

public class Test:TestBase { 

    public Test(): base() { 

    } 

    public string GetExample() { 
    return example; 
    } 

} 

    public class TestBase { 
    protected readonly string example = ""; 

    public TestBase() { 
     example ="hi"; 
    } 

} 

我現在可以使用這個像這樣,它的工作原理:

var test = new Test(); 
Console.WriteLine(test.GetExample()); 

你藏起來了這樣字段,但也強制構造函數只讀字段的可訪問性。

相關問題