当前位置: 首页 > news >正文

阿里云网站备案幕布免费推广网站地址大全

阿里云网站备案幕布,免费推广网站地址大全,应用小程序定制开发,网站swf怎么做文章目录 前言模拟需求场景模拟重复性高的需求初始类结构继承优化抽象类 需求1#xff1a;打印CreateTime方法1#xff1a;使用重载方法2#xff1a;基类函数方法3#xff1a;泛型约束方法3.1#xff1a;普通泛型方法方法3.2#xff1a;高级泛型约束#xff0c;扩展方法… 文章目录 前言模拟需求场景模拟重复性高的需求初始类结构继承优化抽象类 需求1打印CreateTime方法1使用重载方法2基类函数方法3泛型约束方法3.1普通泛型方法方法3.2高级泛型约束扩展方法 总结 番外篇泛型方法和接口泛型约束抽象接口 总结 前言 以前计算机本科学习的时候我就知道了继承重载接口抽象泛型等概念。本章优先讲解继承接口抽象泛型这一组概念。如果说继承抽象只是为了标准化代码规范程序编写的话那么泛型约束就是给于了继承抽象这个写法的必要性。 c# 继承 浅谈C#中的抽象类(abstract)和接口(interface) C#泛型约束 模拟需求 因为我干的是上位机工作这里我就讲解一下我用到的场景。上位机的代码重复性很高泛型约束就是用于解决此类问题。 场景模拟 我是A公司我有多种(为了简单按两种算)产品这2种产品有一下两个特质 每个产品存数据库的字段有完全相同的3个字段 Id:数据库IdDeivceId:设备唯一Id全部种类产品唯一的Id。CreateTime:数据录入数据库时间 重复性高的需求 我们现在有个需求给每个类添加一个打印CreateTime的方法 初始类结构 public class DeviceA{public string DeviceId { get; set; }public long Id { get; set; } public DateTime CreateTime { get; set; }public string ValueA { get; set; }}public class DeviceB{public string DeviceId { get; set; }public long Id { get; set; }public DateTime CreateTime { get; set; }public string ValueB { get; set; }}继承优化 继承的目的就是为了减少重复的字段 public class DeviceA:DeviceBase {public string ValueA { get; set; } }public class DeviceB : DeviceBase {public string ValueB { get; set; }} /// summary /// 使用基类优化代码 /// /summary public class DeviceBase {public string DeviceId { get; set; }public long Id { get; set; }public DateTime CreateTime { get; set; } }抽象类 我们也可以在基类上面添加abstract关键字 public abstract class DeviceBase {public string DeviceId { get; set; }public long Id { get; set; }public DateTime CreateTime { get; set; }}区别就是抽象类无法实例化 那么抽象类的意义就是为了告诉你我的基类是没有任何实际意义的我单纯就是为了继承用的 需求1打印CreateTime 方法1使用重载 static void Main(string[] args) {var DeviceA new DeviceA() { CreateTime DateTime.Now};var DeviceB new DeviceB() { CreateTime DateTime.Now };PrintCreateTime(DeviceA);PrintCreateTime(DeviceB); } public static void PrintCreateTime(DeviceA deviceA) {Console.WriteLine(${deviceA.CreateTime}); }public static void PrintCreateTime(DeviceB deviceB) {Console.WriteLine(${deviceB.CreateTime}); }方法2基类函数 internal class Program {static void Main(string[] args){var DeviceA new DeviceA() { CreateTime DateTime.Now};var DeviceB new DeviceB() { CreateTime DateTime.Now };DeviceA.PrintCreateTime();DeviceB.PrintCreateTime();}}/// summary /// 使用基类优化代码 /// /summary public class DeviceBase {·······public void PrintCreateTime(){Console.WriteLine(CreateTime.ToString());} }方法3泛型约束 方法3.1普通泛型方法 static void Main(string[] args){var DeviceA new DeviceA() { CreateTime DateTime.Now};var DeviceB new DeviceB() { CreateTime DateTime.Now };PrintCreateTime(DeviceA);PrintCreateTime(DeviceB);}/// summary/// 泛型约束DeviceBase基类/// /summary/// typeparam nameT/typeparam/// param namemodel/parampublic static void PrintCreateTimeT(T model)where T : DeviceBase{Console.WriteLine(model.CreateTime.ToString());}方法3.2高级泛型约束扩展方法 C#小轮子扩展方法 internal class Program {static void Main(string[] args){var DeviceA new DeviceA() { CreateTime DateTime.Now};var DeviceB new DeviceB() { CreateTime DateTime.Now };DeviceA.PrintCreateTime();DeviceB.PrintCreateTime();}}public static class DeviceExtension {/// summary/// 扩展方法是更高级的泛型方法,但是需要一个静态类扩展/// /summary/// typeparam nameT/typeparam/// param namemodel/parampublic static void PrintCreateTimeT(this T model) where T : DeviceBase{Console.WriteLine(model.CreateTime.ToString());} }总结 优点缺点重载更灵活每个类都可以定制重复性高基类方法降低重复度耦合度高过多会导致基类臃肿不符合属性类规范泛型约束降低重复度耦合度低易于扩展。不能访问基类以外的属性扩展方法最强的扩展性完美代替基类方法需要单独一个静态类 属性类是我自己的规范。就是基础的属性类只有属性和构造函数没有方法。 番外篇泛型方法和接口 有些时候我们设备类的逻辑特别的复杂比如每个产品都有四个方法 连接发送接受关闭连接 public interface IDevice {public void Connect();public void Send();public void Recive();public void Close();} public class DeviceA : DeviceBase, IDevice {public string ValueA { get; set; }public void Close(){throw new NotImplementedException();}public void Connect(){throw new NotImplementedException();}public void Recive(){throw new NotImplementedException();}public void Send(){throw new NotImplementedException();} }public class DeviceB : DeviceBase, IDevice {public string ValueB { get; set; }public void Close(){throw new NotImplementedException();}public void Connect(){throw new NotImplementedException();}public void Recive(){throw new NotImplementedException();}public void Send(){throw new NotImplementedException();} }泛型约束抽象接口 static void Main(string[] args) {var DeviceA new DeviceA() { CreateTime DateTime.Now};var DeviceB new DeviceB() { CreateTime DateTime.Now };GetData(DeviceA);GetData(DeviceB); }/// summary /// 泛型约束也可以约束接口 /// /summary /// typeparam nameT/typeparam /// param namemodel/param public static void GetDataT(T model) where T : IDevice {model.Connect();model.Send();model.Recive();model.Close(); } 总结 不是说只能用泛型约束去解决问题而且泛型约束和扩展方法更具有扩展性低耦合的特点。大家可以根据自己代码的习惯选择性的使用。
http://www.laogonggong.com/news/117639.html

相关文章:

  • 重庆网站开发企业网站制作教程步骤
  • 机械产品做那几个网站好网站设计与网页制作公司
  • 网站ui设计是什么意思网络软营销的案例
  • 万网网站备案流程制作网站首页psd
  • 网站首页图片代码怎么写公司网站的文案
  • 多语种企业网站建设东南网
  • 如何建立自己的网站?泉州市住房和城乡建设局官方网站
  • 房屋租赁网站开发模版wordpress微信域名回调
  • 六灶网站建设网站开发与部署题库
  • html5可以做交互网站吗淮南电商网站建设
  • 任县建设局网站网页设计与制作书籍
  • 初学网站开发帝国cms是免费的吗
  • 买过域名之前就可以做网站了吗?百度官方客户端
  • 仪器网站模板网站开发项目报价方案
  • 西安有哪些网站建设公司泉州网站建设培训机构
  • 网站建设书籍目录公司展示网站费用
  • 网站管理员有哪些权限网站公告设计
  • 网站建设需要懂什么语言c2c网站类型
  • 师范街网站建设网络营销推广方式思维导图
  • 一个网站seo做哪些工作内容中企动力双语网站
  • php网站开发开题报告如何做网站网站的教程
  • 网站开发河南建网站代理哪个
  • jsp sql 网站开发wordpress更改前端引用
  • 网站内容与标题的区别关键词排名哪里查
  • 网站开发问卷调查题工程公司是做什么的
  • 东莞做网站推广中英文切换网站开发
  • 建设小说网站用什么软件china东莞seo
  • 网站地址英文江门网站建设费用
  • 做网站外国的服务器电影网站建设费用
  • wordpress文章内容编辑器邯郸seo优化