十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要为大家详细介绍了C#的泛型,文中示例代码介绍的非常详细,零基础也能参考此文章,感兴趣的小伙伴们可以参考一下。
10年积累的成都网站设计、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有青阳免费网站建设让你可以放心的选择与我们合作。泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
为什么要使用泛型?通常我们在开发的时候会碰到这样的情况:一个方法实现的功能都是一样的(比如说保存一个对象),但是我们传递的参数类型不一样而已,如果按照一般来讲都会去拷贝一份方法把传递的参数类型改成想要的类型。
代码如下:
//学生实体类 public class Student { public string Stuno { get; set; } public string Name { get; set; } public string Sex { get; set; } public string Phone { get; set; } public string Addr { get; set; } } //教师实体类 public class Teacher { public string Name { get; set; }//教师姓名 public string Department { get; set; }//所属科室 public string Title { get; set; }//职称 //......省略 } //学生操作接口 public interface StudentDao { public void Save(Student s); } //教师操作接口 public interface TeacherDao { public void Save(Teacher t); } //学生接口实现 class StudentDaoImpl:StudentDao { public void Save(Student s) { ISession session = factory.OpenSession(); ITransaction tx; try { tx = session.BeginTransaction(); session.save(s); tx.Commit(); } catch (Exception e) { if (tx != null) tx.Rollback(); throw; } finally { session.Close(); } } } //教师接口实现 class TeacherDaoImpl:TeacherDao { public void Save(Teacher t) { ISession session = factory.OpenSession(); ITransaction tx; try { tx = session.BeginTransaction(); session.save(t); tx.Commit(); } catch (Exception e) { if (tx != null) tx.Rollback(); throw; } finally { session.Close(); } } }
上面的Save方法大部分都是一样的,除了传进来的实体参数类型不一样,对于实体的基本操作(增删改查)都可以通过泛型接口实现,不用每个实体操作接口的实现再写一遍重复的代码,这样就大大提高了编程的效率,和代码的复用率。对于上面的例子应该如何去做呢?请看我下面的代码:
//基本通用接口 public interface DaoSupport{ void save(T entity); } //泛型接口实现 public class BaseDaoImpl:BaseDao { public void Save(B b) { ISession session = factory.OpenSession(); ITransaction tx; try { tx = session.BeginTransaction(); session.save(t); tx.Commit(); } catch (Exception e) { if (tx != null) tx.Rollback(); throw; } finally { session.Close(); } } }
这样的话就TeacherDao,StudentDao可以进行接口继承DaoSupport和TeacherDaoImpl,StudentDaoImp继承接口实现类DaoSupportImpl类就可以公用那些功能方法了。是不是很简单,很好用?!
//老师接口类 public Interface TeacherDao:DaoSupport { ////这里可以进行教师类特有操作的定制实现 } //老师接口实现类 public class TeacherDaoImpl :DaoSupportImpl ,TeacherDao { //这里可以进行教师类特有操作的定制实现 } //学生接口 public interface StudentDao :DaoSupport { //这里可以进行学生类特有操作的定制 } //学生接口实现 public class StudentDaoImpl :DaoSupportImpl ,StudentDao { //这里可以进行学生类特有操作的定制实现 }
总结:
1.泛型类似于一个类型占位符(自己这么理解),在接口里不进行详细的声明,只是给类型占一个位置
2.在具体到某一个操作对象时把参数T换成你要操作对象的类型,那么这个操作类就是正对于该类的操作类实例。极大的提高了编程效率和代码复用。
3.DaoSupport里面所放置的方法是任何一个类型实体对象都有的操作,比如基本的增删改查,就是那些可以被公用的方法代码抽取成公共的基接口类。
4.如果在DaoSupport中实现的方法中不能满足业务需要,那么在具体实体操作类中可以定制自己特有的方法。比如:教师类中要进行多条件查询等。
以上就是C#泛型的详细内容了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注创新互联网站制作公司行业资讯!
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。