c# - 为什么我们不能在 C# 的构造函数中使用 public/protected/private 关键字
问题描述
在 TypeScript 中,我可以编写以下代码,它将接受构造函数参数environment
并将其作为类中的字段提供:
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# 不能做同样的事情?
解决方案
除非类是静态的,否则 C# 编译器会为没有构造函数的类提供一个公共无参数构造函数,以启用类实例化。一个类可以有一个公共/私有/受保护的访问修饰符。
您可以通过将构造函数设为私有来防止实例化类,如下所示:
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 构造函数有参数,你不能在函数定义中将参数定义为 public,下面是处理你想做的事情的正确方法:
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");
}
}
如果还有什么你不明白或者我因为你的问题而误解了,并且细节写得不好,希望对你有所帮助
推荐阅读
- java - NoSuchMethodError Java
- c++ - 功能不打印任何解决方案
- r - R data.table - 将两列相乘,其成分是矩阵
- angular - combineLatest 订阅未触发
- javascript - 如何在angular js中将输入字段值转换为base64编码或解码
- javascript - React-Spring 错误:来自 react-spring 的“动画”库返回错误元素类型无效
- python - 字段“mobile_number”不存在(odoo12)
- recaptcha - Yeezy Supply SiteKey
- android - 为什么应用程序在 Play 商店的启动报告中崩溃?
- apache-kafka - 如何将单个 csv 文件缓存到 Kafka 中的 KTable 中?