0

在线测试有这个问题:

只读变量的特点:

  1. 它是在编译时分配的
  2. 声明和初始化是分开的
  3. 它是在运行时分配的
  4. 所有这些

测试给出的答案为 4。我得到 2 和 3,但不确定 1。这是否是 1 的答案可能出现的示例:

private readonly int readonlyExample = 10;

注意:对于上面的示例,我通常会使用 const

4

4 回答 4

2

如果您为只读变量分配了一个值,那么您就是绑定变量,那么这就是编译时间。例如:

readonlt int xyz=10; // then this is compile time

如果您从任何将执行并返回值的函数中分配值,那么它将是运行时。例如:

readonly int xyz=objClass.getSum();  // Then it is runtime.
于 2015-05-17T18:41:45.113 回答
0

这些可能的答案有点令人困惑(在我看来)。

实际发生的是 C# 编译器实际上发出了如下内容:

private readonly int readOnlyExample;

public YourClassConstructor()
{
    this.readOnlyExample = 10;
}

鉴于此,#2 似乎是一个可能的选择。声明和赋值是分开的。(他们甚至是什么意思是可以争夺的)

3 也可能是正确的,因为该值必须存在于内存中的某个地方。它不是编译时间常数。

于 2012-12-17T01:02:23.240 回答
0

建议的答案 (4) 不正确。因为,选项 1) 不正确!!

只读字段不必是编译时值。考虑以下代码,即使分配给只读字段的值不是编译时已知值,它也能很好地编译!!

    public class ValidatingReadonlyField
{
    private readonly UnKnownClass _readonlyField = new UnKnownClass();
}
public class UnKnownClass
{
    private object _someValue;

    public UnKnownClass()
    {
        _someValue = GetMeSomeThing();
    }

    private static object GetMeSomeThing()
    {
        throw new InvalidOperationException("Can you call me at Compile Time!!!");
    }
}

编辑:根据@Renae 评论更新:

@Renae:答案 1 不正确!因为,上面的示例解释了在编译时分配只读变量的情况。因此,否定语句 1。如果您想进一步否定,请尝试将 readonly 替换为“const”,编译将告诉您它只能具有编译时间值(这不是 readonly 的先决条件)。

于 2012-12-17T03:43:25.340 回答
0

关键字 readonly 具有可以在运行时更改或分配的值

于 2022-03-04T23:46:40.240 回答