如何将 "alias" 赋予数据类型以便稍后更改它
How to give an "alias" to a data type to later change it
首先举个例子,但请三思而后行,不要讨论我应该使用一种类型还是另一种类型,重点在于改变数据类型的可能性:
假设我们正在创建一个处理金钱和人口的应用程序。我们决定 用 Uint16 类型表示货币数量,因为先验似乎合理,大小就足够了,我们不会使用负值。
一段时间后,我们意识到我们将需要不同的类型,因为我们现在需要负值,或者比可能的更多的数量由 Uint16 表示,因此我们希望使用 Int32 代替货币计算。但是我们的代码中还有Uint16表示的其他量(比如人口),所以我们不能直接把所有使用Uint16的都换成Int32。
所以问题是:如何在特定情况下引用数据类型,以便我能够轻松更改正在使用的数据类型,而不影响相同数据类型的不相关使用?
请注意,我在考虑这个问题时并没有创造 class 金钱,但如果你认为这是应该的方式,我也很乐意阅读你的推理。
给类型起别名的一种方法是在 using
部分中进行。您可以为任何类型指定一个自定义名称,然后在您的代码中使用该名称。
如果您只是想从 uint
切换到 decimal
,您可以使用内置类型执行此操作:
using Number = System.Int32;
你会像这样使用它:
Number myNumber = 1;
然后,如果您想将 Number
的所有实例更改为 decimal
,只需执行以下操作:
using Number = System.Decimal;
您也可以使用自定义类型执行此操作,例如,假设我们有两个 类、Bank1
和 Bank2
。 Bank1
有一个名为 Balance
的 uint
属性,而 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...");
}
}
}
现在,稍后我们可以在不破坏代码的情况下更改别名所指的内容:
using Bank = Test.Bank2; // Just change what the alias refers to here
请注意,您仍然需要修复更改类型后可能出现的任何编译错误,具体取决于您所做的更改。
首先举个例子,但请三思而后行,不要讨论我应该使用一种类型还是另一种类型,重点在于改变数据类型的可能性:
假设我们正在创建一个处理金钱和人口的应用程序。我们决定 用 Uint16 类型表示货币数量,因为先验似乎合理,大小就足够了,我们不会使用负值。
一段时间后,我们意识到我们将需要不同的类型,因为我们现在需要负值,或者比可能的更多的数量由 Uint16 表示,因此我们希望使用 Int32 代替货币计算。但是我们的代码中还有Uint16表示的其他量(比如人口),所以我们不能直接把所有使用Uint16的都换成Int32。
所以问题是:如何在特定情况下引用数据类型,以便我能够轻松更改正在使用的数据类型,而不影响相同数据类型的不相关使用?
请注意,我在考虑这个问题时并没有创造 class 金钱,但如果你认为这是应该的方式,我也很乐意阅读你的推理。
给类型起别名的一种方法是在 using
部分中进行。您可以为任何类型指定一个自定义名称,然后在您的代码中使用该名称。
如果您只是想从 uint
切换到 decimal
,您可以使用内置类型执行此操作:
using Number = System.Int32;
你会像这样使用它:
Number myNumber = 1;
然后,如果您想将 Number
的所有实例更改为 decimal
,只需执行以下操作:
using Number = System.Decimal;
您也可以使用自定义类型执行此操作,例如,假设我们有两个 类、Bank1
和 Bank2
。 Bank1
有一个名为 Balance
的 uint
属性,而 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...");
}
}
}
现在,稍后我们可以在不破坏代码的情况下更改别名所指的内容:
using Bank = Test.Bank2; // Just change what the alias refers to here
请注意,您仍然需要修复更改类型后可能出现的任何编译错误,具体取决于您所做的更改。