ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

接口之间的转换

2022-03-01 14:35:35  阅读:196  来源: 互联网

标签:转换 point IGeometry 示例 接口 geometry 之间


来源 目录

接口之间的转换

在 C# 中进行转换

在 C# 中,在接口之间进行强制转换的最佳方法是使用 as 运算符。 使用 as 运算符是比直接强制转换更好的编码策略,因为它在转换失败时产生 null 而不是引发异常。

以下代码示例中,第一行是直接转换。 如果您确定所讨论的对象实现了这两个接口,这是一种可接受的做法。 如果对象未实现您尝试获取句柄的接口,.NET 将引发异常。 使用更安全的方式,是 as 运算符,如果对象无法返回【对所需接口的引用】,则返回 null。

[C#]

IGeometry geometry=(IGeometry)point; // Straight cast.
IGeometry geometry=point as IGeometry; // As operator.

以下代码示例显示了,如何在显式强制转换后,管理返回空接口句柄的可能性:

[C#]

IPoint point=new PointClass();
IGeometry geometry=point as IGeometry;
if (geometry != null)
{
    Console.WriteLine(geometry.GeometryType.ToString());
}

或者,您可以在执行直接转换之前,使用 is 关键字,测试对象在运行时是否实现了某个接口。 请参见以下代码示例:

[C#]

IPoint point=new PointClass();
if (point is IGeometry)
{
    IGeometry geometry=(IGeometry)point;
    Console.WriteLine(geometry.GeometryType.ToString());
}

在 VB .NET 中进行转换

以下是类型转换的2种方式:

  • 隐式(Implicit) - 不需要额外的语法。
  • 显式(Explicit) - 需要强制转换运算符。

请参见以下代码示例:

[VB.NET]

'Implicit cast.
geometry=point

'Explicit cast.
geometry=CType(point, IGeometry)
geometry=DirectCast(point, IGeometry)
geometry=TryCast(point, IGeometry)

在接口之间进行转换时,使用隐式转换是可以接受的,因为在数字类型之间进行转换时,不会丢失数据。 但是,当强制转换失败时,会引发异常 (System.InvalidCastException)。 为避免处理不必要的异常,最好事先测试对象是否实现了这两个接口。 您可以使用 TypeOf 关键字对此进行测试,该关键字是一个【比较子句】,用于测试对象是否派生自或实现特定类型、接口。

以下代码示例,执行了从 IPointIGeometry 的隐式转换,仅当在运行时才确定 Point 类实现了 IGeometry 时:

[VB.NET]

Dim point As New PointClass
Dim geometry As IGeometry
If TypeOf point Is IGeometry Then
    geometry=point
End If

如果您更喜欢使用 Option Strict On 语句来限制隐式转换,请使用 CType 或 DirectCast 函数进行显式强制转换。 以下代码示例,对上一个代码示例进行了显式转换:

[VB.NET]

Dim point As New PointClass
Dim geometry As IGeometry
If TypeOf point Is IGeometry Then
    geometry=CType(point, IGeometry)
End If

或者,您可以跳过 TypeOf 比较,并使用 TryCast,它在转换失败时,返回 Nothing。 请参见以下代码示例:

[VB.NET]

Dim point As New PointClass
Dim geometry As IGeometry=TryCast(point, IGeometry)
If geometry IsNot Nothing Then
    Console.WriteLine(geometry.GeometryType.ToString())
End If

标签:转换,point,IGeometry,示例,接口,geometry,之间
来源: https://www.cnblogs.com/jmllc/p/15949971.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有