【问题标题】:Change from const to property and static context (C#)从 const 更改为属性和静态上下文 (C#)
【发布时间】:2011-02-18 14:09:56
【问题描述】:

我有一个这样的公开课:

public class ClassN
{
    public const int SomeInt = 16;
    ...
}

这是使用

从其他地方调用的
int myInt = ClassN.SomeInt

现在我必须将 16 更改为更动态的东西,看起来像这样:

public int SomeInt
{
    get
    {
         //this method is not static and cant be changed to static 
         return GetIntDynamically();    
    }
}

当然,由于静态上下文,调用不再起作用。我无法创建 ClassN 的新实例...还有什么不违反编码规则的选项?

谢谢

【问题讨论】:

  • 为什么不能创建一个新的ClassN实例?如果您能解释此声明背后的原因,我们或许可以提出一些建议。
  • 我想你的意思是public static int SomeInt?否则非静态方法调用没有问题。
  • @David:我指的是属性,而不是 const 字段。
  • @Timwi。啊,好吧,误会了。在这种情况下,请查看 getter 体内的注释...
  • @Timwi:他当然不是那个意思,因为这就是这个问题的全部意义......

标签: c# static properties


【解决方案1】:

如果GetIntDynamically 不是静态的并且不能设为静态,则您没有其他选择可以创建ClassN 的实例。

【讨论】:

  • 问题是,在那个方法中我使用“this”,这在静态上下文中是不允许的。
  • 问题不在于使用this 本身,而在于使用this 意味着您在该方法中使用了该类的其他实例成员。我认为 David 的评论是对的:请解释一下,为什么不能创建 ClassN 的实例。
【解决方案2】:

如果您无法创建ClassN 的新实例,但您的方法使用this 关键字依赖于某些实例状态,那么您需要在@987654324 的特定已知实例上调用该方法@。如果它是唯一的,那么您也许可以考虑实现单例模式。如果它不是唯一的此类实例,那么您将需要引用对您的调用代码可用的正确实例。因此,正如我在评论中所说,我们需要更多地了解您的情况才能完全回答这个问题。但是,singleton 模式可能就是您所追求的...

【讨论】:

    【解决方案3】:

    这是你要找的吗?

    public class ClassN 
    {
        public static int SomeInt = 16;     
        ...
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-26
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多