在线测试有这个问题:
只读变量的功能:
测试给出答案为4.我得到2和3但不确定1.这是否可以作为1的答案的例子:
private readonly int readonlyExample = 10;
注意:我通常会在上面的示例中使用const
答案 0 :(得分:2)
如果为readonly变量赋值,那么你是绑定变量,那么这就是编译时。例如:
readonlt int xyz=10; // then this is compile time
如果要从任何将执行并返回值的函数中分配值,那么它将是“运行时”。例如:
readonly int xyz=objClass.getSum(); // Then it is runtime.
答案 1 :(得分:0)
这些可能的答案有点令人困惑(在我看来)。
实际发生的是C#编译器实际发出如下内容:
private readonly int readOnlyExample;
public YourClassConstructor()
{
this.readOnlyExample = 10;
}
鉴于此,#2似乎是一种可能的选择。声明和作业是分开的。 (他们甚至意味着什么都可以争夺)
3也可能是正确的,因为该值必须存在于内存某处。它不是编译时常量。
答案 2 :(得分:0)
建议的答案(4)不正确。 因为,选项1)不正确!!
Readonly字段不必是编译时间值。 考虑以下代码,即使分配给readonly字段的值不是编译时已知值,它也能很好地编译!!
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不正确!因为,上面的示例解释了在编译时不分配readonly变量的情况。因此,否定陈述1。 如果你想进一步否定,尝试用“const”替换readonly,编译将告诉你它只能有编译时间值(这不是readonly的前提条件)。