C# неявное/явное преобразование типов

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

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


person Mike    schedule 21.02.2011    source источник
comment
Вы можете использовать оператор implicit, но почему так важно, чтобы ваш класс можно было неявно привести к целому числу? Просто передать num.Value кажется гораздо лучшим решением.   -  person zneak    schedule 21.02.2011
comment
Я разобрался. У меня был совершенно неправильный синтаксис. Я делаю это, потому что класс подразумевает значение; Я думаю, что понятно просто добавить неявную часть, которая все равно возвращает .Value.   -  person Mike    schedule 21.02.2011
comment
Мой связанный с этим вопрос, который может вас заинтересовать: Наследуются ли методы неявного/явного преобразования в C#?   -  person Jonathon Reinhart    schedule 09.07.2015


Ответы (4)


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

    public static implicit operator int(Number num)
    {
        return num.Value;
    }
person CriticalImpact    schedule 21.02.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);
    }
}

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

person Yoko Zunna    schedule 21.02.2011

Неявное преобразование типов. Неявное преобразование типов происходит между меньшими целыми типами в большие, но не наоборот, или между производным классом и базовым классом. Преобразование происходит безопасным способом с помощью C#, без потери данных. Например,

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

Явное преобразование типов. Явное преобразование типов, выполняемое с помощью встроенных функций C#. Данные могут быть потеряны при явном преобразовании типов, то есть, если мы преобразуем double в int, точность может быть потеряна. Явное преобразование типов требует приведения типов. Чтобы выполнить приведение, необходимо указать тип, к которому вы выполняете приведение, перед значением или переменной, которые необходимо преобразовать.

Например,

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

Чтобы разобраться в деталях, следуйте Основы C# — Преобразование типов C#< /а>

person Shrikant More    schedule 23.09.2019
comment
потери данных не происходит, не совсем точно, float (.NET Single) не может точно представлять все значения, возможные в int. - person Lasse V. Karlsen; 23.09.2019

person    schedule
comment
Зачем публиковать собственный ответ, если он уже был предоставлен? Вместо этого вы должны просто проголосовать за него. - person Cody Gray; 21.02.2011
comment
Потому что я ответил на него, когда не было других ответов. Я был в минуте ходьбы. - person Mike; 21.02.2011