我试图在c#中创建一个ufloat类/结构.这对我来说更具挑战性,但可以帮助我控制代码中的一些值.在尝试了几种方法之后,我终于找到了一个似乎有用的方法:
public struct ufloat
{
public float Value
{
get{ return value; }
set
{
if(value < 0)
{
this.value = 0;
}
else
{
this.value = Math.Abs(value);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我希望它表现得像一个典型的基本类型:
ufloat n = 5;
n += 1;
Run Code Online (Sandbox Code Playgroud)
经过一番思考后,我试图重载'='运算符,但这是不可能的.现在我没有想法.这就是为什么我问,你怎么能改变这个:
ufloat x; x.value = 1;
Run Code Online (Sandbox Code Playgroud)
对此:
ufloat x = 0; x = 1;
Run Code Online (Sandbox Code Playgroud)
?
(对不起,如果我失去了一些非常简单的东西,但我是一个自学成才的"程序员",我对c#很新.我最初学习了c ++,而从低级到高级对我来说并不容易.)
您不能使=操作员超载,但您可以使+操作员超载,然后+=操作员(我相信您的意思而不是=+)将以相当明显的方式工作.您还需要在结构中添加隐式转换float.
我强烈建议不要让结构变为可变 - 而是让+运算符返回一个新值.这将使其表现得像其他所有原始类型一样,并且像大多数其他结构一样.我还要将其重命名USingle为遵循正常的.NET命名约定(其中SingleCLR名称为float).您不能添加自己的C#别名的名称一样float是Single虽然.
我怀疑你的类型会想要:
floatfloat(注意通常隐式转换不应该抛出异常 - 你可能想忽略它,但我不确定......)+,-,*和/)ToString,Equals和GetHashCodeIComparable<USingle>和IEquatable<USingle>如果你将两个值"大正浮动"加在一起,你应该考虑你想要发生什么 - 意图是你的新类型能够支持比正数更大的正值float,或者只是" float但它总是非负的" "?