转换的扩展方法
本文关键字:方法 扩展 转换 | 更新日期: 2023-09-27 17:58:47
让我们假设我有一个类,如下所示:
public class PhysicalMemory
{
public string Localtion { get; internal set; }
public ulong Capacity { get; internal set; }
public string Manufacturer { get; internal set; }
public string Part_Number { get; internal set; }
public string Serial_Number { get; internal set; }
public uint Speed { get; internal set; }
}
我需要一个扩展方法来将我的容量从字节转换为KBytes、MBytes和。。。。。如果用户想要,例如:
PhysicalMemory phM = New PhysicalMemory();
ulong capacity_in_bytes = phM.Capacity;
ulong capacity_in_KB = phM.Capacity.ToKBytes();
ulong capacity_in_MB = phM.Capacity.ToMBytes();
为此目的使用扩展方法是没有意义的。即使可以像其他人在这里展示的那样编写扩展方法,你也需要远离这样做。如果你写一个,它只是一个将X ulong
转换为Y ulong
的方法。
在这里,您所能做的最好的事情就是添加相应的属性或转换容量的方法。我更喜欢只读属性。这甚至比使用单独的扩展方法更简单。
public class PhysicalMemory
{
public ulong Capacity { get; internal set; }
public ulong CapacityMB { get { return Capacity / (1024 * 1024); } }
public ulong CapacityKB { get { return Capacity / 1024; } }
}
public static class ULongExtensions
{
public static ulong ToKBytes(this ulong memory)
{
return memory / 1024;
}
public static ulong ToMByptes(this ulong memory)
{
return memory.ToKBytes() / 1024;
}
}
如果您已经创建了类PhysicalMemory
,那么创建扩展方法就没有意义了。这些用于扩展无法修改的类(出于某种原因)。
在ulong
中存储MB值也是没有意义的。这样就不会区分2.1 MB
和2.2 MB
。我认为你不希望这种行为,最好使用decimal
还是double
然而,你可以这样做:
public static class MyExtensions
{
public static decimal ToKBytes(this ulong value)
{
return value / (decimal)1024;
}
public static decimal ToMBytes(this ulong value)
{
return value / ((decimal)1024 * 1024);
}
}
我强烈建议不要用这些方法扩展ulong
类型。这对我来说没有任何意义。要么创建一些转换模块,要么将方法添加到你的类中(可能作为属性)