gpt4 book ai didi

c# - 重载显式 CAST 运算符

转载 作者:太空狗 更新时间:2023-10-29 22:14:35 25 4
gpt4 key购买 nike

我有这段代码:

public class Leg : ProxiestChild
{
public virtual Name { get; set; }
}

问题是:

var leg = new Leg(); // leg is not Leg, instead ProxiedLeg

var trueleg = (Leg)leg; // exception leg is a ProxiedLeg

我需要这样的东西

public class ProxiestChild
{
// some method that overloads explicit CAST
// where receiving the proxied object i returns the unproxied object
// to be casted
}

最佳答案

您可以使用转换运算符 implicitexplicit 实现自定义类型转换。

转换运算符可以是显式的或隐式的。隐式转换运算符更易于使用,但当您希望运算符的用户知道正在发生转换时,显式运算符很有用。本主题演示了这两种类型。

例子

这是一个显式转换运算符的例子。此运算符从类型 Byte 转换而来到称为数字的值类型。因为并非所有字节都可以转换为数字,所以转换是显式的,这意味着必须使用强制转换,如 Main 方法所示。

struct Digit
{
byte value;

public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}

public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion

System.Console.WriteLine("Conversion occurred.");
return d;
}
}

class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.

此示例通过定义一个转换运算符来演示隐式转换运算符,该运算符撤消上一个示例所做的操作:它将一个名为 Digit 的值类转换为整数 Byte类型。因为任何数字都可以转换为 Byte ,无需强制用户明确转换。

struct Digit
{
byte value;

public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}

public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}

class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.

来自:http://msdn.microsoft.com/en-us/library/85w54y0a(v=VS.100).aspx

请注意这一点,为了可读性,看到一种类型神奇地转换为另一种类型通常会让人感到困惑——人们并不总是首先想到有转换运算符在起作用。

关于c# - 重载显式 CAST 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792282/

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