C #: Как это работает: Unit myUnit = 5; - PullRequest
14 голосов
/ 14 октября 2008

Я только что заметил, что вы можете сделать это в C #:

Unit myUnit = 5;

вместо того, чтобы делать это:

Unit myUnit = new Unit(5);

Кто-нибудь знает, как я могу достичь этого своими собственными структурами? Я взглянул на структуру Unit с отражателем и заметил, что атрибут TypeConverter используется, но после того, как я создал собственный TypeConverter для своей структуры, я все еще не мог заставить компилятор разрешить этот удобный синтаксис.

Ответы [ 2 ]

31 голосов
/ 14 октября 2008

Вам необходимо предоставить оператор неявного преобразования из int в Unit, например:

    public struct Unit
    {   // the conversion operator...
        public static implicit operator Unit(int value)
        {
            return new Unit(value);
        }
        // the boring stuff...
        private readonly int value;
        public int Value { get { return value; } }
        public Unit(int value) { this.value = value; }
    }
2 голосов
/ 14 октября 2008

Вам необходимо предоставить оператор приведения для класса, который принимает Int32.

...