Определение новых простых типов в C # ala Delphi - PullRequest
1 голос
/ 03 июля 2011

Я хотел бы определить новые «простые» типы, как это (в 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 голосов
/ 03 июля 2011

Для TYesNo вы можете использовать перечисление:

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

Для других вы можете использовать свойства и проверить длину в установщике:

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;
        }
    }
}
0 голосов
/ 27 февраля 2013

Да, вы можете сделать это

Вы можете использовать , используя ключевое слово , чтобы сделать что-то вроде delphi Type или typedef в C и C ++.

Более подробную информацию можно найти здесь:

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

0 голосов
/ 03 июля 2011

Нет, в C # нет псевдонимов типа подобных. Он не был включен, потому что большую часть времени он использовался, чтобы скрыть, что делает код, вместо того, чтобы сделать код более понятным.

Кроме того, вы не указываете размер строки в C #, и нет никаких чисел с ограниченным диапазоном. Вы можете использовать свойства, которые проверяют значения при их установке.

Для типа YesNo вы можете использовать enum:

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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...