c# - 定义不需要访问器的数据类型(单属性类)
问题描述
在我的项目中,我有一些浮点字段应该保持在 0-1 的范围内。如果可能的话,我想要一个自定义数据类型,称为 float01,它只是在写入值时钳制值,这样我就不必每次都记住这样做。这样我就可以简单地写:
float01 clampedFloat = .9f;
我可以为此创建一个新类,使用具有自定义设置器的单个属性来处理钳位,但是我总是需要通过它的访问器来引用它:
clampedFloat.Value += .2f;
有什么方法可以定义自定义数据类型,我可以简单地编写以下内容?
clampedFloat += .2f;
我知道它在这里看起来像个小东西,但如果我每次都必须添加访问器,我还不如每次都夹住它。不仅如此,感觉就像我错过了一些东西,就像添加一个简单的数据类型应该很容易,而不需要类属性所具有的必要绒毛。
解决方案
应该很容易添加一个简单的数据类型,而无需类属性所具有的必要绒毛。
要定义自己的类型或结构,您可以使用自定义转换运算符,甚至更高级的东西,如运算符重载。
自定义转换
要将新的酷类转换为另一个类或从另一个类转换,您需要使用转换运算符。
为此,您遵循一个简单的格式
从类型转换
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 };
}
}
推荐阅读
- swift - 如何在 tableView 单元格中实现收藏按钮?
- javascript - 如何选择所有父复选框?
- reactjs - 创建反应应用配置:指定现有的 index.html
- google-sheets - 每月将 Google 电子表格中的特定工作表/标签保存到文件夹中
- python - 如何使用键绑定和按钮命令运行 tkinter 函数?
- bash - 安装 haskell 时遇到问题:如何调整 PATH 变量以添加到 shell 配置文件?
- java - Hibernate 延迟属性加载。使用@DynamicUpdate 进行误报字段检测
- java - 多态数组排序中的转换错误
- c# - 如何使用 Ajax 将数字列表从网页发送到服务器
- r - 在R中创建位置的窗口间隔