C # неявное / явное преобразование типов - PullRequest
8 голосов
/ 21 февраля 2011

У меня есть простой сценарий, который может или не может быть возможным. У меня есть класс, который содержит целое число, для этого я сделаю его максимально простым:

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() работать так, как я ее кодировал? Это вообще возможно? Я думаю это можно сделать с помощью явного / неявного оператора, но я не могу понять это.

Ответы [ 3 ]

16 голосов
/ 21 февраля 2011

Попробуйте что-то вроде этого

    public static implicit operator int(Number num)
    {
        return num.Value;
    }
2 голосов
/ 21 февраля 2011
class Number
{  
    public static implicit operator int(Number n)
    {
       return n.Value;
    }
}
1 голос
/ 21 февраля 2011

Неявное преобразование

// 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);
    }
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...