Как дать «псевдоним» типу данных, чтобы позже изменить его - PullRequest
0 голосов
/ 07 марта 2019

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

Предположим, мы создаем приложение для работы с деньгами и населением.Мы решили, что мы будем представлять денежные суммы с типом Uint16 , потому что априори кажется разумным, что размера будет достаточно, и что мы не будем работать с отрицательными значениями.

Через некоторое время, , мы понимаем, что нам понадобится другой тип , так как теперь нам понадобятся отрицательные значения или более высокие суммы, чем может быть представлено Uint16, поэтому мы вместо этого хотим использовать Int32за денежные расчеты.Однако в нашем коде есть другие величины, представленные Uint16 (например, совокупность), поэтому мы не можем просто заменить все использования Uint16 на Int32.

Так что вопрос: как я могу ссылаться на тип данных для конкретных случаев, чтобы я мог легко изменить используемый тип данных, не затрагивая несвязанные использования того же типа данных ?

Обратите внимание, что я думаю об этой проблемебез создания класса Money , но если вы считаете, что так и должно быть, я также с удовольствием прочитал бы ваше обоснование.

1 Ответ

0 голосов
/ 07 марта 2019

Один из способов псевдонима типа - сделать это в разделе using.Вы можете присвоить произвольное имя практически любому типу, а затем использовать это имя в своем коде.

Вы можете сделать это с помощью встроенных типов, если вы просто хотите переключиться с uint на decimal:

using Number = System.Int32;

и использовать его следующим образом:

Number myNumber = 1;

Затем, если вы захотите изменить все экземпляры Number на decimal, просто сделайте:

using Number = System.Decimal;

Это можно сделать с помощью пользовательских типовтакже, например, скажем, у нас есть два класса, Bank1 и Bank2.Bank1 имеет свойство uint с именем Balance, а Bank2 имеет свойство decimal с тем же именем.Мы можем создать псевдоним с именем Bank, который мы используем в нашем коде, и сделать так, чтобы он ссылался на тип Bank1, а затем мы можем создать его экземпляр и присвоить int балансу.

Чтобы подчеркнуть, что разные классы вызываются каждый раз, я изменил их ToString переопределения, чтобы баланс decimal отображался с десятичной точкой:

using Bank = Test.Bank1;

namespace Test
{
    public class Bank1
    {
        public uint Balance { get; set; }
        public override string ToString() => $"Balance is {Balance}";
    }

    public class Bank2
    {
        public decimal Balance { get; set; }
        public override string ToString() => $"Balance is {Balance:N2}";
    }

    public class Program
    {
        private static void Main(string[] args)
        {
            var bank = new Bank();
            bank.Balance = 100;

            Console.WriteLine(bank);

            GetKeyFromUser("\nDone! Press any key to exit...");
        }
    }
}

enter image description here

Теперь, позже мы можем изменить то, на что ссылается этот псевдоним, не нарушая наш код:

using Bank = Test.Bank2;  // Just change what the alias refers to here    

enter image description here

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

...