2012-01-05 99 views
2

任何人都可以给我一个类型铸造的定义以及为什么以及何时应该使用它?类型铸造和类型转换

我试着在网上寻找材料,但找不到任何能解释我为什么我们需要类型转换以及何时使用它的内容。

一个例子会很棒!

+3

我们在讨论哪种语言? – 2012-01-05 16:10:49

+1

-0。广泛的,你可以在谷歌上输入的东西。我不想因此而失败。 – Gabe 2012-01-05 16:12:06

+0

我敢肯定,你只会失去点投票答案,而不是问题。 – 2012-01-05 16:16:52

回答

1

类型转换是强制对象成为特定类型的机制。通俗地说,它是从信箱中挑选一封信(摘要),并将其强制成账单(具体的,具体的)。

这通常与软件开发有关,因为我们处理大量的抽象,所以有时我们会检查给定对象的属性,而不立即知道所述对象的真实具体类型。

在C#中,例如我可能对检查链接到特定控件的数据源的内容感兴趣。

object data = comboBox.DataSource; 

的.DataSource属性的类型是“对象”(在C#是抽象的,你可以得到)的,这是因为DataSource属性支持多种不同的具体类型,并希望允许程序员从多种类型中选择使用。

所以,回到我的检查。使用这种对象类型,我可以用“对象数据”做很多事情。

data.GetType();  // tells me what type it actually is 
data.ToString(); // typically just outputs the name of the type in string form, might be overridden though 
data.GetHashCode(); // this is just something that gets used when the object is put in a hashtable 
data.Equals(x);  // asks if the object is the same one as x 

这是因为这些是在C#中的类对象上定义的唯一API。为了访问更有趣的API,我将不得不将对象转换为更具体的对象。 所以,如果,例如我知道对象是一个ArrayList的,我可以将它转换为一个:

ArrayList list = (ArrayList) data; 

现在我可以用一个ArrayList的API(如果转换工作)。所以我可以做这样的事情:

list.Count; // returns the number of items in the list 
list[x]; // accesses a specific item in the list where x is an integer 

我在上面演示的演员是所谓的“硬”演员。它将对象强制转换为我想要的任何数据类型,并且(在C#中)在转换失败时抛出异常。所以通常你只想在100%确定对象是或应该是那种类型时使用它。

C#还支持所谓的“软”转换,如果转换失败则返回null。

ArrayList list = data as ArrayList; 
if(list != null) 
{ 
    // cast worked 
} 
else 
{ 
    // cast failed 
} 

当您不太确定类型并且想要支持多种类型时,您会使用软转换。

可以说你是comboBox类的作者。在这种情况下,你可能要支持不同类型的.DataSource的所以你最好使用软石膏支持许多不同的类型可能会写代码:

public object DataSource 
{ 
    set 
    { 
    object newDataSource = value; 
    ArrayList list = newDataSource as ArrayList; 
    if(list != null) 
    { 
     // fill combobox with contents of the list 
    } 
    DataTable table = newDataSource as DataTable; 
    if(table != null) 
    { 
     // fill combobox with contents of the datatable 
    } 
    // etc 
    } 
} 

希望帮助解释类型转换到你,为什么它是有关以及何时使用它!:)