在C#ala Delphi中定义新的简单类型

时间:2011-07-03 09:00:59

标签: c# delphi c#-4.0

我想定义像这样的新“简单”类型(在delphi中):

type
  TString2        = string[2];
  TString10       = string[10];
  TYesNo          = (isNull=-1, isNo=0,   isYes=1);
  TBit2           = 0..3;

然后,在我的类字段中使用它,就像这样(再次在delphi中):

TCMDchild = class(TCMDParent)
strict protected
    fSgMrMs:        TString2;
    fSgIsMale:      TYesNo;
    fSgValue1:      TBit2;
    ......

¿有没有办法在C#(VS2010)中获得同样简单的“简单类型构造”?

感谢您的评论。

3 个答案:

答案 0 :(得分:0)

不,C#中没有类似的任何类型别名。它没有被包括在内,因为大部分时间它都被用来隐藏代码所做的而不是使代码更清晰。

此外,您没有在C#中指定字符串的大小,并且没有范围限制的数字。您可以使用在设置值时检查值的属性。

对于YesNo类型,您可以使用枚举:

public enum YesNo {
  No = 0,
  Yes = 1,
  Null = -1
}

class CommandChild : CommandParent {

  private string _fSgMrMs;
  private string _fSgValue1;

  public string fSgMrMs {
    get { return _fSgMrMs; }
    set {
      if (value.Length > 2) {
        throw new ArgumentException("The length of fSgMrMs can not be more than 2.");
      }
      _fSgMrMs = value;
    }
  }

  public YesNo fSgIsMale { get; set; }

  public int fSgValue1 {
    get { return _fSgValue1; }
    set {
      if (value < 0 || value > 3) {
        throw new ArgumentException("The value of fSgValue1 hase to be between 0 and 3.");
      }
      _fSgValue1 = value;
    }
  }

}

注意:您应该尝试使用比“fSgMrMs”更具描述性的名称。

答案 1 :(得分:0)

对于TYesNo,您可以使用枚举:

public enum TYesNo
{
    IsNull = -1,
    No = 0,
    Yes = 1
}

对于其他人,您可以使用属性并检查setter中的长度:

public class TCmdChild : TCmdParent
{
    public TYesNo FSgIsMale { get; set; }

    protected string fSgMrMs;
    public string FSgMrMs
    {
        get { return fSgMrMs; }
        set
        {
            if(value.Length > 2)
                throw new OutOfRangeException("Value.Length needs to be <= 2");
            fSgMrMs = value;
        }
    }
}

答案 2 :(得分:0)

是的,你可以那样做

您可以使用使用关键字在C和C ++中执行类似delphi Type或typedef的操作。

可在此处找到更多信息:

https://stackoverflow.com/a/9258058/970420

相关问题