有没有办法在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);
}
但显然这抱怨只读只能在构造函数中更新,所以有没有办法让一个方法只能在构造函数中运行(或者更确切地说,有没有办法将这些只读更新放入一个方法不在构造函数中但只会在构造函数中运行)?
答案 0 :(得分: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());
通过这种方式,您可以隐藏字段,但也只强制构造函数访问只读字段。