如何强制一个C#类中有一个常量值?

如何强制一个C#类中有一个常量值?,c#,.net-4.0,C#,.net 4.0,可能重复: 考虑一个类,考虑到一些原因,你需要强制这个类在它里面有一个常量。这将应用于任何一组类。在我的特定情况下,我需要我的一些类在它们内部有一个常量来保存相应的空值 在我的例子中,那些实现特定接口的类,因为它们必须以特定的方式运行,它们还必须有三个特殊的值,这三个值在我的上下文中是必需的(上下文太长了,无法解释,在这里非常无用) 所以基本上我需要一种方法来强制我的类在它们内部有一个特定的常量(可以从外部访问)。我知道我可以简单地将常量放在这些类中,但是如果我正在寻找一种方法来告诉编译器:“

可能重复:

考虑一个类,考虑到一些原因,你需要强制这个类在它里面有一个常量。这将应用于任何一组类。在我的特定情况下,我需要我的一些类在它们内部有一个常量来保存相应的空值

在我的例子中,那些实现特定接口的类,因为它们必须以特定的方式运行,它们还必须有三个特殊的值,这三个值在我的上下文中是必需的(上下文太长了,无法解释,在这里非常无用)

所以基本上我需要一种方法来强制我的类在它们内部有一个特定的常量(可以从外部访问)。我知道我可以简单地将常量放在这些类中,但是如果我正在寻找一种方法来告诉编译器:“如果这个类实现了这个接口(例如),那么如果没有那个常量,你就不应该编译它!”

这样就有了编译器检查,而不仅仅是程序员可能忘记输入常量


我希望我能解释我的问题。提前感谢。

关于同一主题的上一个问题的解释:

对静态方法的调用是通过类名完成的,而不是通过 对象引用,调用它的IL代码将调用抽象 方法,但不一定是通过定义它的类的名称 您使用的类的名称


上一篇文章:

将静态方法添加到类中有什么不对?我不明白为什么需要另一个层,而将静态方法直接编码到类中是完全合乎逻辑的

 public class MyClass {
      public static MyClass TheMethod(int i){
           // TODO:
      }
 }
所以基本上我需要一种方法来强制我的类有一定的 内部恒定(可从外部访问)。我知道我可以 简单地把常数放在这些类中,但是如果我正在寻找呢 告诉编译器:“如果这个类实现了这个接口 (例如),如果没有,您不应该编译它 不变!”

您可以通过创建一个包含唯一公共构造函数的类来实现类似的功能,该类需要您所需的所有信息/值。 例如,您可以使用以下内容:

class myClass{
   public readonly int Value1;
   public readonly string Value2;
   public myClass(int value1, string value2){
         Value1 = value1;
         Value2 = value2;
   }
}

实际上,在这种情况下,程序员被迫实例化对象,为可用的唯一构造函数提供正确的值,并且无法更改两个公共字段的值(由于readonly关键字)。

请提供上下文信息。为什么您希望这些类具有特定的静态方法。如果该类用作接口,则不可能。为什么不在继承接口的类中实现静态方法呢?我建议您重新考虑您的问题。静态方法无法从类实例访问,接口仅用于定义实例可以执行的操作。或者,您可以编写自定义代码分析规则?只需实现公共属性,并且只能读取该值。这意味着任何未实现该属性的类都会导致编译错误。是的,实际上这可能是一个很好的解决方案。。。谢谢你,不客气,我希望这对你有帮助。