直接通过类名访问成员

-2 c# oop struct class

我试图在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 ++,而从低级到高级对我来说并不容易.)

Jon*_*eet 5

您不能使=操作员超载,但您可以使+操作员超载,然后+=操作员(我相信您的意思而不是=+)将以相当明显的方式工作.您还需要在结构中添加隐式转换float.

我强烈建议不要让结构变为可变 - 而是让+运算符返回一个值.这将使其表现得像其他所有原始类型一样,并且像大多数其他结构一样.我还要将其重命名USingle为遵循正常的.NET命名约定(其中SingleCLR名称为float).您不能添加自己的C#别名的名称一样floatSingle虽然.

我怀疑你的类型会想要:

  • 接受a的构造函数 float
  • 来回转换float(注意通常隐式转换不应该抛出异常 - 你可能想忽略它,但我不确定......)
  • 重载算术运算符(+,-,*/)
  • 覆盖ToString,EqualsGetHashCode
  • 执行IComparable<USingle>IEquatable<USingle>

如果你将两个值"大正浮动"加在一起,你应该考虑你想要发生什么 - 意图是你的新类型能够支持比正数更大的正值float,或者只是" float但它总是非负的" "?