加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – String,Int32等类和赋值的行为

发布时间:2020-12-15 23:40:05 所属栏目:百科 来源:网络整理
导读:这可能听起来很愚蠢.我们知道我们可以将值赋给字符串变量,如下所示. String name =“myname”; String是引用类型,但在声明和赋值时不需要new运算符.如果我想设计一个具有这种行为的自定义类,我将如何进行? 谢谢 解决方法 您正在寻找的是隐式类型转换方法( M
这可能听起来很愚蠢.我们知道我们可以将值赋给字符串变量,如下所示.
String name =“myname”;

String是引用类型,但在声明和赋值时不需要new运算符.如果我想设计一个具有这种行为的自定义类,我将如何进行?

谢谢

解决方法

您正在寻找的是隐式类型转换方法( Microsoft Documentation).举个例子,假设你有一个名为’PositiveFloat’的类自动将浮点数绑定到值> = 0,那么你可以拥有以下类布局:

class PositiveFloat
{
    public float val = 0.0f;

    public PositiveFloat(float f)
    {
        val = Math.Max(f,0.0f); //Make sure f is positive
    }

    //Implicitly convert float to PositiveFloat
    public static implicit operator PositiveFloat(float f)
    {
        return new PositiveFloat(f);
    }

    //Implicitly convert PositiveFloat back to a normal float
    public static implicit operator float(PositiveFloat pf)
    {
        return pf.val;
    }
}

//Usage
PositiveFloat posF = 5.0f; //posF.val == 5.0f
float fl = posF; //Converts posF back to float. fl == 5.0f
posF = -15.0f; //posF.val == 0.0f - Clamped by the constructor
fl = posF; //fl == 0.0f

对于此示例,您可能还希望为 – etc提供隐式运算符方法以支持此类上的float和int算法.

运算符不仅限于像int这样的核心数据类型,你可以通过使用’=’隐式地从另一个类创建一个类,但是这需要开始判断上下文.是的t = y;有道理,还是应该是事情t = new Thing(y);甚至Thing t = y.ConvertToThing();?随你(由你决定.

在C#的核心,基本数据类型如int,float,char等在编译器级别实现,因此我们有一些基础可以使用.字符串也是如此,即使它看起来像引用类型.这些类型如何与运算符之类的东西一起使用实际上与上面的隐式运算符相同,但是为了确保一致性,以及允许您完全用C#创建自己的“基本”类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读