Vb.net 如何覆盖整数、字符串等基本类型。?
我正在为一个大型应用程序扩展vb.net中的一些基本数据类型。这包括Vb.net 如何覆盖整数、字符串等基本类型。?,vb.net,types,overriding,Vb.net,Types,Overriding,我正在为一个大型应用程序扩展vb.net中的一些基本数据类型。这包括integer、string、short,等等。目前,我的新数据类型对象的名称类似于MYInteger和MYString。由于这些是我在应用程序中使用的唯一类型,并且它们大部分与默认类型兼容,是否有一种方法可以用我的类型覆盖默认值,这样当您将其设置为整数时,您实际上是在使用我的稍微定制的整数类型?我不确定您是否真的想这样做。这将使它在将来更难维护。为什么不直接使用MyInteger等。如果要导入外部源代码,只需查找并替换即可。否
integer
、string
、short
,等等。目前,我的新数据类型对象的名称类似于MYInteger和MYString。由于这些是我在应用程序中使用的唯一类型,并且它们大部分与默认类型兼容,是否有一种方法可以用我的类型覆盖默认值,这样当您将其设置为整数时,您实际上是在使用我的稍微定制的整数类型?我不确定您是否真的想这样做。这将使它在将来更难维护。为什么不直接使用MyInteger等。如果要导入外部源代码,只需查找并替换即可。否。如果可以,请想象会导致的混乱。在这种情况下有两种可能性:
在同一进程中运行的所有代码都将使用这些类型,即使是不希望使用这些类型的代码。糟糕
您的整数
概念与CLR的整数
概念不同,同一类型的两个对象突然不同。糟糕
您可以向密封类型添加扩展方法。比如:
Module MyExtensions
<Extension()>
Public Function Extended(i as Integer) As Integer
return i + 4
End Function
End Module
4.Extended() ' evaluates to 8
模块MyExtensions
公共函数扩展(i为整数)为整数
返回i+4
端函数
端模块
4.Extended()'的计算结果为8
我不知道它是否适用于您的情况,但有时人们希望生成“专用”标量/基本类型
例如,请参见中定义的某些类型。其中一些类型包括纬度、经度、角度等。这些类型中的每一种实际上都是一个具有单个数据成员的结构,通常是double、float或int/long,例如:
public struct Latitude : IFormattable, IComparable<Latitude>, IEquatable<Latitude>
{
private readonly double _DecimalDegrees;
//Some constants
//Some constructors
//Some static fields like...
public static readonly Latitude Equator = new Latitude(0.0);
public static readonly Latitude TropicOfCapricorn = new Latitude(-23.5);
public static readonly Latitude TropicOfCander = new Latitude(23.5);
//Some operators
public static Latitude operator +(Latitude left, Latitude right)
{
return new Latitude(left.DecimalDegrees + right.DecimalDegrees);
}
public static Latitude operator +(Latitude left, double right)
{
return new Latitude(left.DecimalDegrees + right);
}
}
将值指定给AngleInDegrees时,MyObject可能需要执行一些处理:
public double AngleInDegrees
{
get
{
return _AngleInDegrees;
}
set
{
if (value < 0 || value > 360)
{
_AngleInDegrees = NormalizeAngle(value);
}
else
{
_AngleInDegrees = value;
}
}
}
公共双角度基准
{
得到
{
返回角度指数;
}
设置
{
如果(值<0 | |值>360)
{
_角度角度=标准化角度(值);
}
其他的
{
_角度指数=数值;
}
}
}
如果在许多对象上都有AngleInDegrees属性,该怎么办?如果有一个类使用应用程序中其他组件生成的角度,该怎么办?谁应该做验证?这是有用的,能够指望始终与“好”的角度工作
通过使用AngleInDegrees类型,可以在该类型中放置所有验证和特殊的“角度”操作。还可以在所有要使用AngleInDegrees的位置强键入
正如我所说,我不知道这是否是你想要实现的事情。当我读到你的问题时,我突然想到,当我第一次看到我链接的项目时,我也有同样的想法(也就是说,它们实际上是对基本数据类型进行子类化,以形成更严格的基本类型)。你有理由使用新的基本类型吗?为什么不能使用扩展方法呢?我认为这几乎打破了所有编程规则。然而,我也不认为这是可能的。总的来说,这听起来是一个很好的扩展方法。首先,检查一下最近辞职的程序员是否也可以访问FBI的证人保护程序。我担心我做不到这一点。这主要是因为所讨论的代码将由很多人来处理,我们已经遇到了一些问题,一些人使用普通整数,一些人使用自定义类型,然后出现了很多混乱。有些函数是使用默认值编写的,有些是自定义的,我希望简化一些事情。
public double AngleInDegrees
{
get
{
return _AngleInDegrees;
}
set
{
if (value < 0 || value > 360)
{
_AngleInDegrees = NormalizeAngle(value);
}
else
{
_AngleInDegrees = value;
}
}
}