是否有一个C#等同于Delphi的可分配const?

时间:2016-12-15 12:17:08

标签: c# scope

在Delphi中,您可以在方法中声明一个常量,并在同一方法中为其赋值。我们的想法是,下次使用此方法时,const仍将具有与上次分配的值相同的值。

在Delphi中看起来像这样:
(我不会在这里使用Delphi,因此未经测试,对此感到抱歉,但这足以证明我的意思)

procedure Form1.test;
const
  AssignableConst: Integer = 0;
begin
  ShowMessage(AssignableConst);
  inc(AssignableConst);
end;

每次调用程序测试时,消息框都会显示最后一个值+ 1

这个例子完全没用我知道它只是为了展示一个可赋值的const如何在Delphi中工作。

c#中是否有相同的内容? 我不想要一个涉及类中私有变量的解决方案,它必须留在方法中。

我的问题是关于范围。没有其他的。我不在乎这个值是对象状态的一部分。这并不重要。重要的是我需要一个只能从方法范围访问的变量,而不是其他任何地方 在Delphi中,这可以通过使用可赋值的const来完成,那么我该如何在C#中执行此操作?

2 个答案:

答案 0 :(得分:10)

  

我不想要一个涉及类中私有变量的解决方案,它必须留在方法中。

但是该值是对象状态的一部分(或静态方法的类型) - 所以它是在对象中声明的字段是有意义的。

C#中没有与此相同的内容。您可以做的最好的事情是拥有一个私有变量和文档,它只能从特定方法中使用。 (如果你真的想要,你可以为它编写基于Roslyn的测试。)

答案 1 :(得分:1)

最接近的是:

class MyClass
{
    static Action CreateCounter()
    {
        int counter = 0;
        return () => {
            Show(counter);
            counter++;
        };
    }

    Action showAndIncrementCounter = CreateCounter();

    public ShowAndIncrementCounter()
    {
        showAndIncrementCounter();
    }
}

但我仍然建议使用实例字段作为计数器的简单解决方案,而不是从方法外部访问它。