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