2013-01-22 60 views
3

我有一个类,我想在System.Drawing中包含一个类似于Point.Empty的“Empty”常量成员。那可能吗?如何在类中包含“空”常量

这里是什么给了一个错误的简化版本:

public class TrivialClass 
{ 
    public const TrivialClass Empty = new TrivialClass(0); 
    public int MyValue; 
    public TrivialClass(int InitialValue) 
    { 
     MyValue = InitialValue; 
    } 
} 

给出的错误是:TrivialClass.Empty是类型TrivialClass的。除字符串以外的引用类型的const字段只能用null初始化。

如果它的事项,我想用这样的:

void SomeFunction() 
{ 
    TrivialClass myTrivial = TrivialClass.Empty; 
    // Do stuff ... 
} 
+3

'是的,我知道这是.NET并没有Main'再想想.. .. – I4V

+0

@ I4V感谢您的洞察力。有趣的,我会稍后看看,但我不明白这对问题有什么帮助。 – AppFzx

+0

@AppFzx:他只是说.NET *会使用静态的'Main'方法作为默认入口点。 – mellamokb

回答

11

可以使用static readonly这些类型。常量只能用文字值(例如数字,字符串)初始化。

public class TrivialClass 
{ 
    public static readonly TrivialClass Empty = new TrivialClass(0); 
    public int MyValue; 
    public TrivialClass(int InitialValue) 
    { 
     MyValue = InitialValue; 
    } 
} 

查找定义后。 Point.Empty也是static readonlyReference here

+0

完美,这工作!谢谢 – AppFzx

+1

是否可以使用'const'与它是引用类型还是值类型无关。您只能将编译时间常数分配给这样的标识符。对于任何作为编译时间文字的引用值(即'null'或任何字符串文字),这些都可以工作。对于值类型,他们仍然需要编译时文字(意思几乎只是数字类型)。 'default(...)'不是一个编译时间文字。 – Servy

+0

@servy或字符串,字符。 –

1

只是一个快速的拍摄,但我会建议Point.Empty是一个静态成员,而不是一个常数:

public class TrivialClass 
{ 
    public static readonly TrivialClass Empty = new TrivialClass(0); 
    ... 
} 
+0

你说得对,'Point.Empty'是静态的。它也是只读的。看到我的答案。 –