C# C中获取变量的正确语法#
如果您只在对象初始化时设置变量,但希望其他对象能够读取变量,而不是在初始化后设置变量,那么C#中的正确语法是什么 据我所知,它看起来像这样:C# C中获取变量的正确语法#,c#,C#,如果您只在对象初始化时设置变量,但希望其他对象能够读取变量,而不是在初始化后设置变量,那么C#中的正确语法是什么 据我所知,它看起来像这样: class Test { private string name; public string Name { get { return name; } } public Test() { this.name = "Hello World!"; } } 这是正确的方法吗?您可以使用readonly关键字-它只允许在类初始化期间设置值: cl
class Test
{
private string name;
public string Name { get { return name; } }
public Test() {
this.name = "Hello World!";
}
}
这是正确的方法吗?您可以使用readonly关键字-它只允许在类初始化期间设置值:
class Test
{
private readonly string name;
public string Name { get { return name; } }
public Test
{
this.name = "Hello World!";
}
}
即使是同一类的方法也不能改变name
的值
使用C#6,您甚至可以编辑变量名和只读关键字:
class Test
{
public string Name { get; }
public Test()
{
this.Name = "my readonly value";
}
}
您的实现看起来是正确的,但可以更简单地表达出来
public string Name {get;} = "Hello World!";
在现代C#中,您可以执行以下操作:
class Test
{
public string Name { get; }
public Test(string name)
{
Name = name;
}
}
您的getter正在返回私有字段,但我的版本正在使用.NET的自动备份功能。同样在我的版本中,backing字段是只读的,所以即使在类中也不能更改它。如果您确实需要,您可以使用:
class Test
{
public string Name { get; private set; }
//...
}
使用最新版本的C#还有其他设置方法,但我更喜欢在构造函数中显式地说明这一点 > P>这是正确的方法,但是,您可能需要考虑使用<代码> Read Ong/Cuth>关键字,这样可以防止在构造函数之外修改<代码>名称>代码>变量。 像这样:
class Test
{
private readonly string name;
public string Name { get { return name; } }
public Test()
{
name = "Hello World!";
}
public Test(string name)
{
this.name = name; //You use this to set scope to the object to disambiguate name
}
}
更简单的实现是使用只读自动属性
,但这并不阻止在构造函数之外进行修改:
class Test
{
public string Name {get; private set;}
public Test()
{
Name = "Hello World!";
}
public Test(string name)
{
Name = name;
}
}
如果您使用的是C#6:
您可以执行以下操作:
class Test
{
public readonly string Name = "Hello World!";
public Test()
{
}
}
或
@贾索尼文斯:嗯,他在问正确的语法,现在你已经改正了;)@TimSchmelter查看未决变更:-/另请参见和等。哦,当然还有语言文档。我只是这样写答案,太好了!还应该说明构造函数可以将
名称
作为参数。OP并没有说它不能被注入,只是说它以后不能被改变。@TimSchmelter更新。还包括一个关于的提示,用于消除范围歧义。@TimSchmelter-Oops。实际上打算使用自动属性初始值设定项。。。。。使用C#6时,向下投票的原因是什么?公共字段是糟糕的编码实践。在您的示例中,我看不出公共字符串名称{get;private set;}有什么区别,只是您可以使用其他功能扩展getter和setter,但这取决于您的需要。你能举一些例子,为什么这不是一个好的做法吗?请阅读这里的答案:-这是为什么使用属性而不是字段的合理解释,所以我同意你的评论。
class Test
{
public readonly string Name = "Hello World!";
public Test()
{
}
}
class Test
{
public readonly string Name;
public Test(string name)
{
this.Name = "Hello World!";
}
}