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

#c# #type-conversion #implicit-conversion

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

Вопрос:

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

С уважением

Комментарии:

1. Эта ссылка полезна для преобразования типов и примеров: msdn.microsoft.com/en-us/library/ms173105.aspx

Ответ №1:

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

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

Ответ №2:

Неявное и явное преобразование типов в 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. Обратите внимание, что существует небольшое количество данных, теряющих неявные преобразования. Например, преобразование из long в double приводит к потере данных , но не к потере величины .

Ответ №3:

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

 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 #).

Ответ №4:

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

 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;
 

Ответ №5:

Предположим, что у нас есть пустая бутылка объемом 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 не будет удовлетворительной, его можно скопировать.
Это называется явным преобразованием