implicit关键字做自定义类型隐式转换的方法
作者:大涛哥 发布时间:2021-10-22 20:00:40
标签:implicit,自定义
隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。但是,因为隐式转换不需要程序员将一种类型显式强制转换
为另一种类型,所以使用隐式转换时必须格外小心,以免出现意外结果。一般情况下,隐式转换运算符应当从不引发异常并且
从不丢失信息,以便可以在程序员不知晓的情况下安全使用它们。
在C#中,implicit关键字可以用来做自定义类型隐式转换。下面给个例子来说明。
定义一个Point类,表示一个点:
public class Point
{
public double X { get; set; }
public double Y { get; set; }
}
再在Point类中定义一个静态方法,用于由字符串隐式转换为Point类型:
public class Point
{
public double X { get; set; }
public double Y { get; set; }
public static implicit operator Point(string constValue)
{
var result = new Point();
try
{
var arPoint = constValue.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries);
result.X = Convert.ToDouble(arPoint[0]);
result.Y = Convert.ToDouble(arPoint[1]);
}
catch
{
result.X = 0;
result.Y = 0;
}
return result;
}
}
使用的过程非常简单,就跟我们平时的隐式转换一样:
Point p = "3,4.5";
Console.WriteLine("X:{0}, Y:{1}", p.X, p.Y);
注意,尽量隐式转换过程中不会出错,或者能处理异常情况。否则请使用explicit变为强制转换。
0
投稿
猜你喜欢
- 1.在res上面右键->New->Android resource directory2.点击之后,出现下图Resource t
- 本文实例为大家分享了C#泛型类创建与使用的具体代码,供大家参考,具体内容如下using System;using System.Collec
- 1.依赖的jar文件 jsch-0.1.53.jar2.登录方式有密码登录,和密匙登录 代码:主函数:import java.ut
- 你可能在上篇文章中《深入多线程之:双向信号与竞赛的用法分析》注意到了这个模式:两个Waiting 循环都要下面的构造:lock(_locke
- 1 实战前的理论基础1.1 Spring Batch是什么Spring Batch 是一个轻量级、全面的批处理框架,旨在支持开发对企业系统日
- MapTask工作机制如图所示。 (1)Read阶段:MapTask通过用户编写的RecordReader,从输入InputSpl
- 一、抽象类1.抽象类1.1抽象类的定义在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个
- WPF实现滚动条还是比较方便的,只要在控件外围加上ScrollViewer即可,但美中不足的是:滚动的时候没有动画效果。在滚动的时候添加过渡
- 1、检测权限因为dump系统lsass内存和sam注册表需要管理员权限,所以首先需要对当前进程上下文权限做判断。public static
- Apache Shiro官网:https://shiro.apache.org/spring-boot.html.一、依据官网快速搭建Qui
- 前言Kafka是现在非常热门的分布式消息队列,常用于微服务间异步通信,业务解耦等场景。kafka的性能非常强大,但是单个微服务吞吐性能是有上
- 我们知道多线程因为同时处理子线程的能力,对于程序运行来说,能够达到很高的效率。不过很多人对于多线程的执行方法还没有尝试过,本篇我们将为大家介
- 在谈 Volatile 之前,我们先回顾下 Java 内存模型 的三要素:原子性、可见性、有序性,也就是大家常提到的并发编程三要素。并发编程
- Spring 中bean的获取1.通过context.getbean 的方式来获取beanApplicationContext:是sprin
- Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标
- 1、@RequestMapping@RequestMapping 既可以用在类级别,也可以用在方法级别,当它定义在类级别的时候,标明该控制器
- 什么是Java垃圾回收器Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的
- 本文实例讲述了C#关闭指定名字进程的方法。分享给大家供大家参考。具体实现方法如下:public static void stopNamedP
- 求数组中最大的数的值:1、数组的max函数:class Program { &nb
- 1、配置maven环境变量,将maven安装的bin⽬录添加到path路径中(此电脑->属性->高级系统设置->环境变量-