2
A
回答
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
}
}
希望帮助解释类型转换到你,为什么它是有关以及何时使用它!:)
0
维基百科有一篇关于不同类型的好文章。 http://en.wikipedia.org/wiki/Cast_(computer_science)
相关问题
- 1. 铸造类型和转换
- 2. 铸造从类型类型
- 3. 铸造类型
- 4. C#类型铸造或转换
- 5. 铸造或数据类型转换
- 6. 铸造泛型和泛型类型
- 7. 铸造和类型问题
- 8. flex3类型铸造
- 9. 类型铸造datetime
- 10. SQL类型铸造
- 11. Windbg类型铸造
- 12. Python类型铸造
- 13. Oracle类型铸造
- 14. VB.NET - 铸造类型
- 15. JodaTime类型铸造
- 16. Java类型铸造
- 17. 泛型类型铸造?
- 18. 泛型类型铸造
- 19. 浇铸COQ转换类型
- 20. 铸造,泛型和子类型
- 21. 类和指针的C++类型铸造
- 22. 类型铸造变量中的类型
- 23. 类型铸造对象类型变量
- 24. 在Java中的类型铸造/铸造
- 25. 哪一个更好?转换和类型铸造
- 26. 铸造/类型的转化效果
- 27. 匿名类型和LINQ和铸造
- 28. 自动类型铸造
- 29. 铸造类型的麻烦
- 30. 避免类型铸造
我们在讨论哪种语言? – 2012-01-05 16:10:49
-0。广泛的,你可以在谷歌上输入的东西。我不想因此而失败。 – Gabe 2012-01-05 16:12:06
我敢肯定,你只会失去点投票答案,而不是问题。 – 2012-01-05 16:16:52