Пожалуйста, дайте мне пример неявного и явного преобразования типов в C # - PullRequest
3 голосов
/ 01 ноября 2011

любой может привести пример неявного преобразования типов в реальной жизни.Я знаю, что неявное преобразование типов означает преобразование из производного в базовый класс, но я не знаю, как показать в кодировании в C #.Я не хочу определять это в 2 строки.Я хочу определить полную программу, чтобы показать неявное и явное преобразование типов в C #.Пожалуйста, помогите мне.

С уважением

Ответы [ 5 ]

12 голосов
/ 01 ноября 2011

Нет, неявное преобразование типов просто означает преобразование типов, которое не обязательно должно быть явным в коде.

LINQ to XML предоставляет хорошие примеры:

// Implicit conversion from string to XNamespace
XNamespace ns = "http://url.com";

XElement element = new XElement("foo", "bar");
// Explicit conversion of XElement to string
string value = (string) element;

Так вот какони используются - и вы создаете свои собственные явные или неявные операторы преобразования, используя код, показанный в MSDN ( явный , неявный ).

Краткий, полный, но бессмысленный пример:

class Foo
{
    private readonly int value;

    private Foo(int value)
    {
        this.value = value;
    }

    public static implicit operator Foo(int value)
    {
        return new Foo(value);
    }

    public static explicit operator int(Foo foo)
    {
        if (foo == null)
        {
            throw new ArgumentException("foo");
        }
        return foo.value;
    }
}

class Test
{    
    static void Main(string[] args)
    {
        int x = 10;
        Foo foo = x;
        int y = (int) foo;
    }
}
1 голос
/ 01 ноября 2011

Неявное и явное преобразование типов в C # похоже на C ++ и другие языки ООП.

Если преобразование не приведет к потере данных, преобразование произойдет автоматически. Больше ничего не нужно делать.

int i = 10;
double j = 20.1;

j = i;

// j = 10.

если преобразование приведет к потере данных, то вы должны явно указать тип, в который будет преобразован объект:

int i = 10;
double j = 20.1;

i = (int) j;

// i = 10

Это самый базовый пример, другие преобразования будут происходить, когда вы работаете с объектами в соответствии с их деревом наследования ...

1 голос
/ 01 ноября 2011

Неявный (Это всего лишь пример, существуют другие ситуации, в которых тип объекта неявно преобразуется.)

int f(Animal a) {...}

Elephant e; // Elephant is-a Animal
f(e);

Явные

int f(Animal a) {...}

Alien someAlien; // Alien is-not-a Animal
f((Animal)someAlien); // Works only if conversion from Alien to Animal is user-defined.

Вероятно, наиболее интересной частью моего ответа будет указание обратиться к Приведение типов и преобразование типов (Руководство по программированию в C #) для полного объяснения различных типов преобразований в C #, а во-вторых, к Операторы преобразования (Руководство по программированию в C #) .

0 голосов
/ 31 июля 2018

Предположим, что у нас есть 1 литровая пустая бутылка и 1/2 литровая бутылка. Предположим, я хочу перенести воду из второй бутылки в первую бутылку. Так как 1-й контейнер больше, он способен вместить всю воды. например,

int i=10; //i is 4 bytes. 
long l=i;//l is 8 bytes.

Этот тип преобразования называется неявным преобразованием. Предположим, что мы переносим всю воду из большого контейнера в маленький контейнер. Тогда есть вероятность потери данных, а также код не будет выполнен. например,

long l=199;
int i=(int)l;

// до тех пор, пока емкость значения int не будет удовлетворена, можно копировать. Это называется явным преобразованием

0 голосов
/ 01 ноября 2011

Встроенные типы:

byte smallNumber = 255;

// byte implicitly casted to int
int num = smallNumber;

// explicitly cast byte to int
num = (int)smallNumber;

Пользовательские типы:

public abstract class AnimalBase
public sealed class Tiger : AnimalBase

Tiger tiger = new Tiger();

// explicit (but really does not required to be specified)
AnimalBase anotherAnimal = (AnimalBase)tiger;

// implicit Tiger to AnimalBase
AnimalBase anotherAnimal = tiger;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...