Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法只能在构造函数中运行_C#_Constructor - Fatal编程技术网

C# 方法只能在构造函数中运行

C# 方法只能在构造函数中运行,c#,constructor,C#,Constructor,有没有办法在c#中标记一个方法,使它只能在构造函数中运行?基本上,我有一堆只读字符串数组,需要使用构造函数中的基列进行更新,因此我执行以下操作: public CMSBlogContext(ICMSRelationshipContext relationshipContext) { _relationshipContext = relationshipContext; ColumnNames.AddBaseColumns(ref _blogAuth

有没有办法在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);
    }

但是很明显,这抱怨只读只能在构造函数中更新,所以有没有办法使方法只能在构造函数中运行(或者更确切地说,有没有办法将这些只读更新放入一个不在构造函数中但只在构造函数中运行的方法中)?

您可以做的一件事是使用基类并在其上放置属性。然后可以使用基类的构造函数设置只读字段,如下所示:

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

这样可以隐藏字段,但也可以强制只读字段的仅构造函数可访问性

这方面的问题是:如果
AddBaseColumns
本身调用的方法仅由
AddCBaseColumns
调用,因此由构造函数隐式调用,该怎么办?你会如何标记最后一个方法?阅读更多内容这与dupe完全不同,请投票重新打开。@Mafii社区用户关闭了它,这意味着OP同意它是一个dupe。创建一个类,该类应包含要在构造函数中执行的所有代码。将所有只读字段移到该字段。从该类继承并使用构造函数调用:base()@Ramankingdom。如果constructopr中的代码非常复杂,需要自己的方法,那么为什么不提取一个类并在其构造函数中设置变量呢?