如何为数据类型赋予“别名”以在以后更改它

时间:2019-03-07 17:18:40

标签: c# types alias

首先举个例子,但是请带点盐,不要讨论我应该使用一种还是另一种类型,重点是改变数据类型的可能性:

让我们假设我们正在创建一个用于处理金钱和人口的应用程序。我们决定用类型Uint16表示货币数量,因为先验的假设是合理的,即大小足够,并且我们不使用负值。

一段时间后,我们意识到我们将需要其他类型,因为我们现在需要的是负值,或者需要比Uint16可以表示的数量更多的数量,因此我们想要使用Int32代替进行货币计算。但是,在我们的代码中还有Uint16表示的其他数量(例如,人口),因此我们不能仅将Uint16的所有用法替换为Int32。

所以问题是:如何在特定情况下引用数据类型,以便我能够轻松更改正在使用的数据类型,而又不影响相同数据类型的不相关使用

请注意,我在考虑此问题时并未创建 Class Money ,但是如果您认为应该这样做,那么我也很高兴阅读您对此的推理。

>

1 个答案:

答案 0 :(得分:0)

别名的一种方法是在using部分中进行命名。您可以为几乎所有类型指定自定义名称,然后在代码中使用该名称。

如果您只想从uint切换到decimal,则可以使用内置类型进行操作:

using Number = System.Int32;

,您将像这样使用它:

Number myNumber = 1;

然后,如果您想将Number的所有实例改为decimal,只需执行以下操作:

using Number = System.Decimal;

您也可以使用自定义类型来执行此操作,例如,假设我们有两个类,Bank1Bank2Bank1具有称为uint的{​​{1}}属性,而Balance具有同名的Bank2属性。我们可以创建一个在我们的代码中使用的名为decimal的别名,并使其引用类型Bank,然后我们可以实例化其实例并将Bank1分配给余额

为了突出显示每次都调用不同的类,我更改了它们的int覆盖,以使ToString余额用小数点显示:

decimal

enter image description here

现在,稍后我们可以更改别名所指的内容而不会破坏我们的代码:

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

请注意,根据所做的更改,仍然必须去修复更改类型后可能发生的所有编译错误。