C# 在创建对象时,是否可以为常量变量赋值?
我正在为WebRequestTool创建一个客户端,该客户端包含一个令牌,该令牌在每个对象的整个生命周期中使用,但对于类的每个实体都是唯一的。因为我不希望在创建对象后该值可以更改,所以我希望它是常量 我已经尝试使用从构造函数调用的内部SetMethod,如:C# 在创建对象时,是否可以为常量变量赋值?,c#,C#,我正在为WebRequestTool创建一个客户端,该客户端包含一个令牌,该令牌在每个对象的整个生命周期中使用,但对于类的每个实体都是唯一的。因为我不希望在创建对象后该值可以更改,所以我希望它是常量 我已经尝试使用从构造函数调用的内部SetMethod,如: internal void setToken(string token) { this.TOKEN = token; } 我还尝试在构造函数中分配它。这也是行不通的 public class Client { const
internal void setToken(string token)
{
this.TOKEN = token;
}
我还尝试在构造函数中分配它。这也是行不通的
public class Client
{
const TOKEN;
public client(string token)
{
this.TOKEN = token;
}
}
除了在声明常量时对其进行硬编码之外,真的没有其他方法来指定它吗?如果有什么呢?您可以将其声明为私有只读
public class Client
{
private readonly string _token;
public Client(string token)
{
_token = token;
}
}
只读字段一旦设置就不能修改,可以在构造函数中设置。来自:
常量字段只能在声明字段时初始化
您可能希望改为使用:
只读字段可以在声明或构造函数中初始化。因此,根据使用的构造函数,只读字段可以具有不同的值
另一个不错的资源:使用如何?哦。我不知道这一点,因为我对这个很陌生。有没有一种方法可以从集合函数中实现所有这些?因为readonly似乎也只能从构造函数中写入。@ArtisticalLigator-就像从setter中写入一样?您的情况是不知道何时要初始化它,但只想初始化一次吗?不,这不是因为我想设置它的时间,而是因为保持构造函数的大小可理解。@ArtisticAligator“保持构造函数的大小可理解”是什么意思?@ArtisticalLigator-如果它很大,可能做得太多了。考虑一下,如果您可以使用多个ctor,其中一个调用另一个。如果没有,那么您还可以创建一些私有函数并从ctor调用它们。但我还是要说,如果ctor做了这么多,那么它可能是在做不应该做的事情