VB.NET中的“quasi-enum”

时间:2014-08-26 18:43:16

标签: .net vb.net visual-studio

当我使用System.Drawing.ColorSystem.Drawing.Brush参数调用函数时,即使Color,Visual Studio也会自动显示预定义颜色/画笔的列表,例如枚举是一个结构,Brush是一个类。

如何使用自己的struct / class实现相同的效果?

修改

我认为这是VB特有的,似乎IntelliSense在C#中的工作方式完全不同。为清晰起见,我添加了屏幕截图。

使用Color工作:

ok

我自己的结构不起作用:

not ok

3 个答案:

答案 0 :(得分:2)

拥有public static字段或属性。

颜色特别使用公共只读属性。有关示例,请参阅Color.AliceBlue

答案 1 :(得分:1)

它们是属性,XML文档指定要在Intellisense的下拉列表中显示的颜色。

来自Microsoft Source - System.Drawing.Color:

/// <include file='doc\Color.uex' path='docs/doc[@for="Color.AliceBlue"]/*' />
/// <devdoc>
///    <para>[To be supplied.]</para>
/// </devdoc>
public static Color AliceBlue {
    get {
        return new Color(KnownColor.AliceBlue);
    }
}

答案 2 :(得分:0)

对于您将看到的color.cs中的c#

    /// <include file='doc\Color.uex' path='docs/doc[@for="Color.AliceBlue"]/*' />
    /// <devdoc>
    ///    <para>[To be supplied.]</para>
    /// </devdoc>
    public static Color AliceBlue {
        get {
            return new Color(KnownColor.AliceBlue);
        }
    }

自定义类的示例:

public class foo
{
    public int a;

    public foo(int _a){a = _a;}

    public static foo preset1{ get{ return new foo(1); }}
    public static int getPreset1AsInt{ get{ return foo.preset1.a; }}

    public static foo preset2{ get{ return new foo(2); }}//this doesn't have to be New it can be a private static field!
    public static foo preset3{ get{ return new foo(3); }}




}

或者你知道你想做什么。这段代码很草率,但我希望你能得到这个想法