[英]C# public datatype variable( get; private set) Why do we need set method if variable is already public?
[英]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.