接着来讲讲泛型的部分....
简单来说泛型就是传入值、传回值不固定的情况下这时候就可以使用泛型...
我查了一下很多的网路上泛型的说法都是用工厂制作箱子去说明,但我觉得太不直观了
以下用大家常用Call Api方式去说明泛型的用法
下面我会举例一个Call Api 范例
假设我预期要从http://localhost:999/api/nk/Login Call这个api 传入值为 Login Class 回传值为 Result Class 为下方范例
var user = apis.CallAPI<Result, Login>(Login, "/api/nk/Login");
Login 类别
public class Login
{
public string UserID { get; set; }
public string UserPwd { get; set; }
}
Result 类别
public class Result
{
public string Code { get; set; }
public string Message { get; set; }
public string Stauts { get; set; }
}
假设我预期要从http://localhost:999/api/nk/Member Call这个api 传入值为 Member Class 回传值为 Result2 Class 为下方范例
var user = apis.CallAPI<Result2, Member>(Member, "/api/nk/Member");
Member 类别
public class Member
{
public string MemberID { get; set; }
public string MemberPwd { get; set; }
}
Result2 类别
public class Result
{
public string Code2 { get; set; }
public string Message2 { get; set; }
public string Stauts2 { get; set; }
}
共用泛型 funtion
/// <summary>
/// 呼叫API
/// </summary>
/// <typeparam name="T">回传之型别</typeparam>
/// <typeparam name="T1">传入之型别</typeparam>
/// <param name="t1">传入之型别</param>
/// <param name="strParaUri">API URI</param>
/// <returns>API回传讯息</returns>
public static T CallAPI <T,T1>(T1 t1, string strParaUri)
{
//Login
T RetuenValue = default(T);
try
{
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("http://localhost:999");
HttpResponseMessage response = null;
// 将 data 转为 json
string json = JsonConvert.SerializeObject(t1);
// 将转为 string 的 json 依编码并指定 content type 存为 httpcontent
HttpContent contentPost = new StringContent(json, Encoding.UTF8, "application/json");
response = httpClient.PostAsync(strParaUri, contentPost).Result;
if (response.IsSuccessStatusCode)
{
RetuenValue = JsonConvert.DeserializeObject<T> (response.Content.ReadAsStringAsync().Result);
}
}
catch (Exception ex)
{
}
return RetuenValue;
}
}
注解:使用泛型如果有回传值需在static後面加上 T funtion名称後面加上 T
如果有传入值则要在funtion名称後面加上 T1
由上面范例可以很清楚资料当我使用呼叫APIfuntion 传入值、传回值不固定的情况下(资料型态不见得每次都一样),就可以泛型,好处在於可以节省程序码。
<<: Day03 UIKit 02 - App Delegate
>>: Day03 Federated plugins (联合插件)
事件 指的是在 DOM 上所发生的事件,换句话是可以是特定的动作被触发後,必须要执行对应的事情。 (...
【DAY 17】微软生产力平台 Microsoft Power Platform 补充 — Code...
前言 今天会实作资料库的结构。我们总共需要实作三个 table 的 scheme,分别是 users...
原本想回诊禾馨的时候顺便带幼兽去小禾馨打满一个月可以打的B肝疫苗,但完全预约不到,打电话去问说有没有...
在上一篇我们学习了 Docker 的基础操作,相信大家都可以感觉到 Docker 惊人的方便性吧! ...