照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写。后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到。于是,老周接受了该朋友的建议。

有初入职场的弟弟妹妹们经常诉苦,为啥,因为常常被人骂,被老员工骂,被老板骂。好像自己做的事永远都是错的,于是感觉很受打击,很伤心。

这里老周必须提醒各位,小伙子应该坚强一点,小妹妹们也不要过于绝望,千万不要因为这些事情去做傻事。西湖景观很美,“欲把西湖比西了,淡妆浓抹总相宜”,但是,如果有人跳西湖自杀的话,真是大煞风景,破坏自然天道。你可不要当这种千古罪人,而且要多想想父母,把你养这么大,你如果觉这种轻生的行为也是孝道的话,那你去死吧,老周不拦你。

初入职场,谁不是天天被人骂的,遥想老周当年,经常早上一到办公室,打开电脑,然后抬头一看,墙上的纸板上列出了老周上个月的十大罪状,妈的,写得像法院判决书似的,那架势,简直要吃人的姿态。

至于那老员工,平时受老板的气,现在你进来了,不拿你来发泄找谁去。人最可怕的就是情绪的奴役,尤其是职场上的压力。而比这更可怕的是,现代人真的在很多地方比不上古人,现在的人遇到不顺心的事,不懂得如何去化解和调整,要么乱来,要么自我毁灭;要么沉迷于酒色,要么沉迷于网络游戏。究其根本,就是精神世界太空白,平时又不多读书,人家孔老头都说了,修身齐家治国平天下,你呢,连修身都没做好,还吹什么牛逼呢?一屋不扫,何以扫天下?

老周被人骂的时候,就站在那里听着,听完后,心里没有任何感觉,晚上回家读几首诗就把白天的事忘得一干二净了。职场嘛,你应该练就这种本领。

记得老周做得最猛,也最为光荣的一件事,大约在2011年初吧,某天一到办公室,习惯地抬头看看纸板,发现多了几个写得很难看的大字——“粗枝大叶”。我就知道经理又在说我了。中午下班后,我就到对面马路找我的朋友,她在那里开了个少儿书画培训班。我去她那里找了宣纸和毛笔,然后写上四个大字——“卧薪尝胆”,随后请她吃了饭作为答谢。

下午上班后回到办公室,我就把刚写好的几个大楷直接贴在经理写的几个丑字上面,然后继续工作。

第二天早上,经理进来看到了我写的那几个大字,就在我耳边说了句:“你小子,真有你的。” 正好那个时候,老周也想换个环境,所以老周向经理承诺,把近期的项目完成后,写后各种文档,以供后面来的人接手,就很洒脱地离开了公司。

老周一直以为,那天经理应该生气了。谁曾想,相隔几年后,2015年5月,我在亲戚的婚宴上偶遇经理,以及几位旧同事。我就很坦白地问经理:“那件事,你当时是不是很生气?”  经理放下筷子,说:“倒不是,是很惊讶。你那几个字现在还在那里,你有空可以来办公室看看。”  然后咱们就聊了些有的没的一堆闲话,比如搞IT教育如何如何,怎么培训新员工之类的。我感觉经理现在对我的态度很友善,和几年前完全相反。

故事讲完了,老周只是实话实说,至于说老周做得对不对,你自己参考吧。

=======================================================

今天说一个基础知识,我记得,我的烂书《精通C#》里面介绍过自定义类型转换的内容,书名有点夸张,老周不喜欢这名字,但出版社喜欢,我也没办法。

实现自定义类型转换可以通过重载运算符来解决。有两种转换方式:

1、隐式转换:就像子类实例可以直接赋给基类变量一样,不需要写任何强制转换的东东,通过赋值就能够自动转换类型。

2、显式转换:必须手动写上强制转换,才能完成类型的转换。比如 int x = (int)dv;

好,咱们用实例说话,先来个隐式转换的。

假设我定义了一个Product类,表示一种产品的信息。

    public class Product{public int ProID { get; set; }public string ProName { get; set; }public float ProSize { get; set; }}

我希望实现:可以将一个Product类隐式转换为string类型。可在类型中重载转换运算符。

        public static implicit operator string(Product p){return $"产品ID = {p.ProID},产品名称 = {p.ProName},产品尺寸 = {p.ProSize}";}

和普通运算符重载差不多,都是声明为公共的,静态的,因为运算符是操作类型的,不是针对某个实例而设定的。要实现隐式转换,需要加上implicit关键字,转换运算符实际上是要转换的目标类型,此处是string,然后参与运算的操作数是Product实例。

下面,一起来见证一下奇迹。

        static void Main(string[] args){Product prd = new Product();prd.ProID = 1001;prd.ProName = "山货自行车";prd.ProSize = 1.35f;// 隐式转换为字符串string str = prd;// 输出
            Console.WriteLine(str);Console.Read();}

得到结果如下。

正常情况下,Product实例是不能转换为string的,但由于我上面定义隐式转换的运算符重载,使得这一赋值成为可能。

string str = prd;

如果使用显式转换,则在使用时必须明确注明强制转换。

假设一个Work类,代码如下:

    public class Work{public int Num1 { get; set; }public int Num2 { get; set; }public static explicit operator int(Work w){return w.Num1 * w.Num2;}}

显式转换重载和前面隐式转换差不多,只是要把implicit关键字换成explicit关键字。下面可以测试一下。

            Work wk = new Work();wk.Num1 = 5;wk.Num2 = 7;// 赋值时要强制转换int n = (int)wk;Console.WriteLine($"计算结果:{n}");

同样的,在正常情况下,Work类是复合类型,也不可能强制转换为int值,但由于在类中有自定义转换,所以使用强制转换是可以完成转换的。

其实,.net库中有许多类型也定义了这两种转换,比如WPF中,动画时间线对象的Duration属性就可以TimeSpan进行隐式转换。

别小看这个基本知识点,经验表明,这东东在实际应用中很有用。

示例代码下载

转载于:https://www.cnblogs.com/tcjiaan/p/5042525.html

【.NET深呼吸】基础:自定义类型转换相关推荐

  1. C#构造函数、操作符重载以及自定义类型转换

    构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...

  2. AutoMapper搬运工之自定义类型转换

    前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NE ...

  3. Python基础-数据类型转换,默认参数,关键字参数

    Python基础-数据类型转换,文件操作,默认参数,关键字参数 1.数据类型之间转换 """ 数字型:int float bool compex 非数字型:list tu ...

  4. day29Struts 类型转换和自定义类型转换,input视图

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-/ ...

  5. C# 自定义类型转换

    1.显式转换和隐式转换: int a=123; long b=a; // 从int到long的隐式转换 int c=(int) b; // 从long到int是显式转换 --------------- ...

  6. Java基础---数据类型转换和运算符

    03 数据类型转换和运算符 数据类型转换 自动类型提升 小范围数据赋值给大范围数据,数据类型自动提升. 要求两者数据类型要能够兼容并且是小转大 byte--->short--->int-- ...

  7. PyTorch基础-自定义数据集和数据加载器(2)

    处理数据样本的代码可能会变得混乱且难以维护: 理想情况下,我们想要数据集代码与模型训练代码解耦,以获得更好的可读性和模块化.PyTorch 域库提供了许多预加载的数据(例如 FashionMNIST) ...

  8. java list 自定义类型转换_java – 可以从List生成平面XML结构的XStream自定义转换器?...

    我正在使用XStream,并且有一个类如下的字段: private Map data; 我想生成这样的XML输出: test data test data test data 所以我希望map键成为元 ...

  9. 【JS基础】类型转换——不同数据类型比较

    小试牛刀 输出下列数据比较结果 [] == 0; //==============================================================true[] == f ...

最新文章

  1. 11月27号例会记录
  2. Android开发和调试必备工具-SDK Tools
  3. Navicat for MySQL数据库管理工具
  4. python伪造请求头x-forwarded-for的作用_Pyspider中给爬虫伪造随机请求头的实例
  5. 如何反映两条曲线的拟合精度_用水平仪如何检测导轨的直线度?
  6. 腾讯竞购ICQ或失败!
  7. excel emoji php,PHP导出带有emoji表情的文本到excel文件出问题了
  8. 这样就算会了PHP么?-7
  9. pytorch保存.pth文件
  10. 广州线下见面会,来了!
  11. Java中如何使某个类的对象唯一性,只能创建一个对象
  12. 8种常见的 代码 编译 软件 !!
  13. VLAN 间路由配置
  14. S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析
  15. Codeforces 484A - Bits (贪心)
  16. 1241.外卖店优先级
  17. 提取DWI数据的FA和MD
  18. 最大进程线程数 连接数
  19. 半年以来的Interview经历
  20. WRF运行过程中遇到的各种报错记录

热门文章

  1. python属性访问权限_python 面向对象-访问权限修饰符
  2. 带有下标的赋值维度不匹配_KDD 2019|?结构感知的神经网络对人才-组织匹配的影响...
  3. eslint规范_规范统一前端代码风格
  4. MySql安装及Navicat连接(解决Starting the server失败;mysql输入密码登录报错1045(28000),不输入密码却能登录;Navicat连接报错2059)
  5. wxpython 按钮跳notebook_按钮按下wxpython刷新窗口
  6. python字典的键可以是元组吗_python字典的键可以是元组吗
  7. outlook 搜索框_日程管理,用 Outlook 也行
  8. filter执行先后问题_filter的执行顺序是怎样的?
  9. 开关造成的毛刺_模具清洗机干冰清洗机干冰去毛刺机安全注意事项
  10. 现在的python版本_现在python 流行哪个版本