gpt4 book ai didi

c# - String、Int32 等类的行为和赋值

转载 作者:行者123 更新时间:2023-11-30 14:06:47 24 4
gpt4 key购买 nike

这听起来可能很愚蠢。我们知道我们可以为字符串变量赋值,如下所示。
String name = "我的名字";

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

谢谢

最佳答案

您正在寻找的是一种隐式类型转换方法 ( Microsoft Documentation )。例如,假设您有一个名为“PositiveFloat”的类,它会自动将 float 限制为 >= 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

对于这个例子,您可能还想为 +- 等提供隐式运算符方法,以支持此类的 float 和 int 运算。

尽管运算符不仅限于像 int 这样的核心数据类型,您可以仅通过使用“=”隐式地从另一个类生成一个类,但这到了您需要开始判断上下文的地步。 Thing t = y; 是否有意义,或者它应该是 Thing t = new Thing(y); 还是 Thing t = y.ConvertToThing(); ?这取决于你。

在 C# 的核心,像 int、float、char 等基本数据类型是在编译器级别实现的,所以我们有某种基础可以使用。 string 也是,即使它看起来像一个引用类型。这些类型如何与运算符等内容一起使用实际上与上面的隐式运算符内容相同,但可以确保一致性,并允许您完全在 C# 中发明自己的“基本”类型。

关于c# - String、Int32 等类的行为和赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45349687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com