【发布时间】:2013-08-01 09:26:34
【问题描述】:
在过去的几年里,我一直在使用 C 语言,我已经习惯了将单一用途的 static 变量放在我的代码中使用它们的位置附近。
在编写一个需要方法范围静态值的非常基本的方法时,我有点惊讶地发现编译器不喜欢我试图从我的方法中定义一个静态对象。
谷歌搜索已证实这在 C# 中是不可能的。不过,我很好奇为什么代码(如下所示)完全不受限制。
public int incrementCounterAndReturn()
{
static int i = 0;
return ++i;
}
当然,这是一个简单的示例,可以针对相同的效果重新定义,但这不是重点。方法范围,静态值有它们的位置和目的。哪些设计决策阻止了在 C# 中实现这样的静态对象?
我们使用的是 C# 版本 5.0,现在是 2013 年。我只能假设这是不可能的,因为设计选择,而不仅仅是因为“实现起来既复杂又难”。有人知道内幕消息吗?
【问题讨论】:
-
我不知道他们没有在 C# 中实现这一点的任何陈述原因。我个人认为这是不好的做法,至少对于我正在考虑的用例而言。
-
只需在 VB.NET 中编写此代码。并查看生成的 IL。是的,当多个线程可以调用此方法时,确保变量只初始化一次是那的代价。隐藏大量代码不是 C# 方式。也不是 VB.NET 方式,但他们别无选择。而不是 C 方式,它只是让你把腿打断。
-
感谢@HansPassant。我应该考虑到这一点!
-
一个相关的、更受欢迎的功能请求:Property backing value scope.
标签: c# static compiler-errors