如何解决定义不需要访问器的数据类型单一属性类
在我的项目中,我有一些浮动字段应该保持在 0-1 的范围内。如果可能的话,我想要一个自定义数据类型,称之为 float01,它在写入时简单地限制值,这样我就不必每次都记住这样做。这样我就可以简单地写:
float01 clampedFloat = .9f;
我可以为此创建一个新类,使用具有自定义 setter 的单个属性来处理钳位,但是我总是需要通过它的访问器来引用它:
clampedFloat.Value += .2f;
clampedFloat += .2f;
我知道它在这里看起来是件小事,但如果我每次都必须添加访问器,我不妨每次都夹住它。更重要的是,感觉好像我遗漏了一些东西,就像添加一个简单的数据类型应该很容易,而没有类属性所具有的所需绒毛。
解决方法
应该很容易添加一个简单的数据类型,而不需要类属性所具有的必要性。
要定义自己的类型或结构,您可以使用 custom conversion operators 甚至更高级的东西,例如 operator overloading。
Custom conversion
要将新的酷类与其他类相互转换,您需要使用转换运算符。
为此,您遵循一个简单的格式
从类型转换
public static implicit operator <YOUR_TYPE>(<OTHER_TYPE> obj)
转换为类型
public static implicit operator <OTHER_TYPE>(<YOUR_TYPE>obj)
这是一个快速而简单的示例,可能会对您有所帮助。
public class ClampedFloat
{
public float Min { get; set; } = -1f;
public float Max { get; set; } = 1f;
public float Value
{
get => _Value;
set
{
_Value = Math.Clamp(value,Min,Max);
}
}
private float _Value = 0f;
public static implicit operator float(ClampedFloat obj)
{
return obj.Value;
}
public static implicit operator ClampedFloat(float obj)
{
return new ClampedFloat() { Value = obj };
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。