以下代码编译时出现警告和智能感知错误:
ref class Test {
initonly static TimeSpan Delay = TimeSpan(1,1,1);
Test() {
long long ticks = Delay.Ticks; // << problem
}
};
问题是:
如何正确访问Ticks?
答案 0 :(得分:12)
#pragma warning(disable:4395)
,以便警告被抑制。
只有在VS2012中尝试此操作时才会出现IntelliSense错误。那是一个错误。您可以在connect.microsoft.com上报告。
鉴于痛苦并且这似乎是私人类成员,我只是放弃 initonly 来取得进展。如果那不可取,那么你可以用一个属性包装该字段,故意创建副本,从而摆脱这两个问题,如下所示:
ref class Test {
initonly static TimeSpan _delay = TimeSpan(1,1,1);
static property TimeSpan Delay {
TimeSpan get() { return _delay; }
}
Test() {
long long ticks = Delay.Ticks;
}
};
抖动优化器将摆脱它,所以不用担心开销。
答案 1 :(得分:0)
感谢汉斯·帕桑(Hans Passant)的解释,我现在对上下文的理解要好得多
我遇到了同样的问题。
我的解决方法是
也许这不是“最先进的”编码,但效果很好,请参见here (VisualStudio2017仍然会暴露这种行为/问题)