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

时间:2011-11-01 15:10:06

标签: c# type-conversion implicit-conversion

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

此致

5 个答案:

答案 0 :(得分:12)

不,隐式类型转换只是意味着代码中不需要显式的类型转换。

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(explicit中显示的代码类型创建您自己的显式或隐式转换运算符, implicit)。

简短,完整,但毫无意义的例子:

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 :(得分:1)

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

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.

我的回答中最有趣的部分可能是告诉您参考Casting and Type Conversions (C# Programming Guide)以获取C#中不同转换类型的完整说明,其次是Conversion Operators (C# Programming Guide)

答案 2 :(得分:1)

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

如果转换不会导致任何数据转换,则会自动进行转换。没有别的事情需要做。:

int i = 10;
double j = 20.1;

j = i;

// j = 10.

如果转换会导致dataloss,那么您必须明确说明主题将被转换为的类型:

int i = 10;
double j = 20.1;

i = (int) j;

// i = 10

这是最基本的示例,当您根据其继承树工作转换对象时,将发生其他转换......

答案 3 :(得分:0)

内置类型:

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;

答案 4 :(得分:0)

假设我们有一个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值的容量令人满意时才可以复制。 这称为显式转换