请给我c#中隐式和显式类型转换的例子

本文关键字:类型转换 | 更新日期: 2023-09-27 18:13:26

谁能在现实生活中给我一个隐式类型转换的例子?我知道隐式类型转换意味着从派生类到基类的转换,但我不知道如何在c#编码中显示。我不想用两行来定义它。我想定义一个完整的程序来显示c#中的隐式和显式类型转换。请帮帮我。

请给我c#中隐式和显式类型转换的例子

不,隐式类型转换只是指不需要在代码中显式的类型转换。

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

c#中的隐式和显式类型转换类似于c++和其他OOP语言。

如果转换不会导致任何数据丢失,转换将自动发生。:

int i = 10;
double j = 20.1;
j = i;
// j = 10.

如果转换将导致数据丢失,则必须显式声明主题将转换为的类型:

int i = 10;
double j = 20.1;
i = (int) j;
// i = 10

这是最基本的例子,当您根据继承树对对象进行强制转换时,将会发生其他转换…

隐式(这只是一个示例,还有其他情况下对象的类型被隐式转换。)

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#编程指南)。

内建类型:

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;

假设我们有一个点燃1点的空瓶子和一个点燃1/2点的空瓶子。假设我想把水从第二个瓶子转移到第一个瓶子。由于第一个容器更大,它能够容纳整个水。例如

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

这种类型的转换称为隐式转换。假设我们把所有的水从一个大容器转移到一个小容器。这样就有可能丢失数据,而且代码也不会被执行。例如

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

//直到int值的容量满足时才可以复制。这叫做显式转换