Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在创建对象时,是否可以为常量变量赋值?_C# - Fatal编程技术网

C# 在创建对象时,是否可以为常量变量赋值?

C# 在创建对象时,是否可以为常量变量赋值?,c#,C#,我正在为WebRequestTool创建一个客户端,该客户端包含一个令牌,该令牌在每个对象的整个生命周期中使用,但对于类的每个实体都是唯一的。因为我不希望在创建对象后该值可以更改,所以我希望它是常量 我已经尝试使用从构造函数调用的内部SetMethod,如: internal void setToken(string token) { this.TOKEN = token; } 我还尝试在构造函数中分配它。这也是行不通的 public class Client { const

我正在为WebRequestTool创建一个客户端,该客户端包含一个令牌,该令牌在每个对象的整个生命周期中使用,但对于类的每个实体都是唯一的。因为我不希望在创建对象后该值可以更改,所以我希望它是常量

我已经尝试使用从构造函数调用的内部SetMethod,如:

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做了这么多,那么它可能是在做不应该做的事情