C#隐式/显式类型转换

时间:2011-02-21 04:11:23

标签: c# .net type-conversion implicit-conversion

我有一个简单的场景,可能会也可能不会。我有一个包含整数的类,为此我会尽量简单:

public class Number
{
    public int Value {get; set;}
    public string Name {get; set;}
}

public static void Print(int print)
{
    Console.WriteLine(print);
}

public static string Test()
{
    Number num = new Number (9, "Nine");
    Print(num); //num "overloads" by passing its integer Value to Print.
}

// Result
// 9

如何使Test()函数正常工作,因为我编写了它?这甚至可能吗?我认为这可以使用显式/隐式运算符完成,但我无法弄明白。

4 个答案:

答案 0 :(得分:16)

尝试这样的事情

    public static implicit operator int(Number num)
    {
        return num.Value;
    }

答案 1 :(得分:2)

class Number
{  
    public static implicit operator int(Number n)
    {
       return n.Value;
    }
}

答案 2 :(得分:1)

隐式转化

// Implicit conversion. num long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;

明确转换

class Test
{
    static void Main()
    {
        double x = 1234.7;
        int a;
        // Cast double to int.
        a = (int)x;
        System.Console.WriteLine(a);
    }
}

希望这可以帮助你。

答案 3 :(得分:0)

隐式类型转换:隐式类型转换发生在较小到较大的整数类型之间,反之亦然,或者在派生类和基类之间发生。转换通过C#以类型安全的方式进行,并且不会发生数据丢失。 例如,

int a = 10;
long b = a;
float f = a;

显式类型转换:使用内置C#函数完成的显式类型转换。显式类型转换时数据可能会丢失,这意味着如果我们将double转换为int,则精度可能会丢失。显式类型转换需要强制转换。要进行转换,需要在要转换的值或变量前面指定要转换的类型。

例如,

double d = 10.20;
int a = (int)d;
//Output: 10

要详细了解,请遵循C# Basics - C# Type Conversion