C#泛型简单应用
最近老板要在app里开展金融模块了,产品一下就丢丢丢二三十个表单下来,怎么办,赶紧写代码,有20多个表单要提交呢,得建20多个表。等等,好像这些表单很相似,公司信息,个人信息,可是还有部分不同信息怎么办?可不可以存json数据,以前有模块仍json进一个字段,让app,web自己解析,这样耦合性太高了,除了前任第一次开发方便,现任维护起来非常痛苦,那就用mongo吧,一个集合,也不用建20多个表了,但是提交接口怎么办?二三十个接口想想就吐血,那就一个接口传个object对象,有没有什么办法能传只有我想要的对象,貌似泛型可以,那就用一下吧。
下面是本次案例代码:
private MongoServer mongoServer = new MongoServer();
private string collName = "Financial";
/// <summary>
/// 保存表单
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="form"></param>
/// <param name="userId">用户Id</param>
/// <param name="type">表单类型</param>
public void SaveBankingForm<T>(T form, int userId, int type) where T : Financial
{
var fromJson = JsonConvert.SerializeObject(form);
//获取类型
var financialType = XmlHelper.GetType("Financial", "FinancialType", type.ToString(), "id");
//拼接json字符串
var json = "{\"userId\":" + + ",\"typeId\":" + financialType.Id + ",\"typeName\":\"" + financialType.Name + "\"" +
",\"Financial\":" + fromJson + "}";
mongoServer.Insert(collName, json);
}
public void Test()
{
//假设有三个表单,有共同的CompanyInfo属性,部分相同的Person属性,其他各自的属性
//*********投资表单*********
TouZi touZi = new TouZi();
var company = new CompanyInfo() { CompanyName = "公司1", Address = "江陵路" };
var personTz = new PersonTz() { Name = "白玉京", Mobile = "" };
touZi.Company = company;
touZi.Person = personTz;
SaveBankingForm(touZi, , ); //*********融资表单*********
RrongZi rongZi = new RrongZi();
company = new CompanyInfo() { CompanyName = "公司2", Address = "市民中心" };
var personRz = new PersonRz() { Name = "白玉京1", Mobile = "", Amount = "10000.00" };
rongZi.Company = company;
rongZi.Person = personRz;
SaveBankingForm(rongZi, , ); //*********并购表单*********
BingGou bingGou = new BingGou();
company = new CompanyInfo() { CompanyName = "陌陌", Address = "市民中心" };
var personBG = new PersonBG() { Name = "白玉京", Mobile = "", Amount = "30000.00",BGCompany="探探" };
bingGou.Company = company;
bingGou.Person = personBG;
SaveBankingForm(bingGou, , );
}
public class PersonTz : PersonInfo
{
}
public class PersonRz : PersonInfo
{
/// <summary>
/// 融资金额
/// </summary>
public string Amount { get; set; }
}
public class PersonBG : PersonInfo
{
/// <summary>
/// 收购金额
/// </summary>
public string Amount { get; set; }
/// <summary>
/// 并购单位
/// </summary>
public string BGCompany { get; set; }
}
/// <summary>
/// 投资表单
/// </summary>
public class TouZi : Financial
{
/// <summary>
/// 企业信息
/// </summary>
public CompanyInfo Company { get; set; }
/// <summary>
/// 投资表单个人信息
/// </summary>
public PersonTz Person { get; set; }
}
/// <summary>
/// 融资表单
/// </summary>
public class RrongZi : Financial
{
/// <summary>
/// 企业信息
/// </summary>
public CompanyInfo Company { get; set; }
/// <summary>
/// 融资表单个人信息
/// </summary>
public PersonRz Person { get; set; }
}
/// <summary>
/// 并购表单
/// </summary>
public class BingGou : Financial
{
/// <summary>
/// 企业信息
/// </summary>
public CompanyInfo Company { get; set; }
/// <summary>
/// 并购表单个人信息
/// </summary>
public PersonBG Person { get; set; }
}
定义接口只接受Financial的类型,Financial是一个空的父类,所有继承Financial的子类都可用泛型接口SaveBankingForm保存。
比如现实生活中,我们定义一个Animal类,FlyAnimal(飞行类),LandAnimal(爬行类),WaterAnimal(水生类)都继承了Animal,再定义比如:Fish继承WaterAnimal,Tiger继承LandAnimal,所有Fish,Tiger都可以用类型是Animal的泛型方法,Tiger不能用FlyAnimal的泛型方法。tree也不能用Animal的泛型方法。
当然每个子类都有自己的具体属性和方法,这边又会涉及到抽象工厂模式了。
最后再贴下Test()方法运行结果。
C#泛型简单应用的更多相关文章
- 使用泛型简单封装NGUI的ScrollView实现滑动列表
懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...
- java泛型简单学习
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public st ...
- Java泛型简单理解
优点1: 没有使用泛型,向list集合中添加非字符串,运行时会报错:类型不匹配 ObjectList.java: package cn.nxl2018; import java.util.ArrayL ...
- Java编程思想-泛型-简单泛型例子
基本类型无法做为类型参数 代码如下: /** * */ package test.thinkinjava.Generics; import java.util.ArrayList; import ja ...
- java 泛型简单使用
- C#的泛型的类型参数可以有带参数的构造函数的约束方式吗?
Review后看到标题让我十分羞愧自己语文功底太差,估计...请见谅......我还特地把这句写回开头了...... 问题 前天遇到的一个问题,所以在MSDN发了个问,刚也丰富了下问题,关于泛型的. ...
- java泛型 之 入门(interface)
一:泛型简单介绍: (1)所谓泛型,就是变量类型的參数化. 泛型是JDK1.5中一个最重要的特征.通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能. ...
- 最佳新秀Java(22)——再次了解泛型
仿制药Java SE 1.5新功能.通用自然是参数化类型.即操作数据类型被指定为一个参数.这样的参数类型可以在课堂上使用.创建的接口和方法,他们被称为通用类..泛型方法. Java语言引入泛型的优点是 ...
- java泛型-泛型类,泛型接口,常用形式
泛型简单使用: package com.etc; import java.util.ArrayList; import java.util.List; /* 泛型就相当于<>一个标签,泛化 ...
随机推荐
- ZooKeeper集群的安装、配置、高可用测试
Dubbo注册中心集群Zookeeper-3.4.6 Dubbo建议使用Zookeeper作为服务的注册中心. Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的.正是 ...
- 读《你不知道的JavaScript(上卷)》后感-浅谈JavaScript作用域(一)
原文 一. 序言 最近我在读一本书:<你不知道的JavaScript>,这书分为上中卷,内容非常丰富,认真细读,能学到非常多JavaScript的知识点,希望广大的前端同胞们,也入手看看这 ...
- 1.NET是什么
- 记录一次tomcat下项目没有加载成功
哥们儿实在太low了,web.xml文件中加载的spring mybatis配置文件和配置的文件不是同一个文件名导致的!
- java利用poi生成/读取excel表格
1.引入jar包依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi< ...
- Windows脚本修改主机名-不重启
windows通过脚本方式修改主机名的方法有很多种,下面介绍修改注册表方式的脚本. 使用方法: 1 打开cmd,假如脚本名为ModifyHostname.bat 2 执行脚本,并加入脚本参数,其中第一 ...
- android 页面的切换
startActivity后加:IntentHelper.jump(mContext, MyBalanceActivity.class);activity.overridePendingTransit ...
- java面向对象基础(四):抽象类和接口
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- JAVA设计模式之---工厂模式
1.引言 工厂模式可以分为类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这种模式从上 ...
- 使用localhost可以访问,但使用本地ip+端口号无法访问
今天想使用ip访问本机的iview-admin项目,结果怎么配置都无法访问,根据iview工程执行的命令npm run dev了解到是webpack配置的问题,打开工程里的node_modules文件 ...