簡體   English   中英

為什么我們不能在 C# 的構造函數中使用 public/protected/private 關鍵字

[英]why we cannot use public/protected/private keywords in the constructor of C#

在 TypeScript 中,我可以編寫以下代碼,該代碼將接受構造函數參數environment並將其作為 class 中的字段提供:

class Example {

    constructor(private Environment environment) {

    }

    public get Name(): string { return this.environment.Name; }

}

在 C# 中,可以使用以下代碼產生等效行為。 在這里,我必須手動創建字段並從構造函數參數中分配其值:

class Example
{

    public Example(Environment environment)
    {
        this.enviornment = enviornment;
    }

    private Environment environment;
    public string Name => this.environment.Name;

}

為什么 C# 沒有和 TypeScript 類似的功能,所以可以這樣寫?:

class Example
{

    public Example(private Environment environment)
    {
    }

    public string Name => this.environment.Name;

}

為什么 C# 不能做同樣的事情?

除非 class 是 static,否則 C#DC 編譯器會為沒有構造函數的類提供公共無參數構造函數,以便啟用 ZA2F2ED4F8EBC26BBBBBABC2。 A Class 可以具有公共/私有/受保護的訪問修飾符。

您可以通過將構造函數設為私有來防止 class 被實例化,如下所示:

class NLog
{
    // Private Constructor:
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

現在在你上面提到的例子中:

public class MainWindowViewModel
    {
        public MainWindowViewModel(
            MainWindow view,
            public Enviornment enviornment)
        {

        }

        public string Name => this.enviornment.Name;
    }

MainWindowViewModel 構造函數有參數,您不能在 function 定義中將參數定義為公共參數,下面是處理您想要做的事情的正確方法:

public class Environment {
    private string _SomeInfo;
    public String SomeInfo 
      { 
        get { return _SomeInfo; }
        set 
        { 
          if (value != null)
          {
            _SomeInfo = value; 
          }
        }
      }
}

public class Program : Environment
{
    public int VariableInfomration;

    private void program(int Data,string information){
       Data = 0;
       information ="";
       VariableInfomration = 1;
    }

    public string Name => SomeInfo;      

    public static void Main(string[] args)
    {
        Console.WriteLine("Example Constructor");
    }
}

如果還有什么你不明白或者我因為你的問題而誤解了,並且細節寫得不好,希望對你有所幫助

根據 c# 中的構造函數或任何方法的語法,我們只能定義數據類型和變量名作為參數。 訪問修飾符在 class 級別定義。

例如。 Class 環境可以公開,但是當您定義類型環境的參數時,

您只需在構造函數中傳遞 class 名稱和變量名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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