泛型知識

来源:http://www.cnblogs.com/ZkbFighting/archive/2017/09/28/7608056.html
-Advertisement-
Play Games

在繼承中,子類擁有父類的一切屬性和行為,而且任何父類出現的地方,都可以用子類來替代;可謂“長江後浪推前浪”啊 object是一切類的父類 泛型在編譯的時候確定類型(延遲思想); 泛型:用一個方法,來滿足不同類型的參數;泛型實際上是語法糖,由編譯器提供功能;沒有性能損失 泛型參數的個數可以隨便定義 貼 ...


int   -2147483648~2147483647    21億

在繼承中,子類擁有父類的一切屬性和行為,而且任何父類出現的地方,都可以用子類來替代;可謂“長江後浪推前浪”啊

object是一切類的父類

泛型在編譯的時候確定類型(延遲思想);

泛型:用一個方法,來滿足不同類型的參數;泛型實際上是語法糖,由編譯器提供功能;沒有性能損失

泛型參數的個數可以隨便定義

========================貼代碼=====================================================

public class GenericClass//定義一個泛型類
{
public static void show<T>(T tParameter)//泛型是一個方法後<T> 括弧里傳參數
{
Console.WriteLine("這是{0},類型是{1}",tParameter,tParameter.GetType());
}


public static int Show<T, S>(string s,int t,int d)//泛型傳的類型可以是多個T,S
{
int num = Convert.ToInt32(s);

return num + t + d;
}

public static void Add<T>(int i, string s, double d)
{
double dd = i + d;
Console.WriteLine("我是{0},我今年{1}歲",s,dd);
}


public static void ShowObject(object obj)//object 是所有類型的基類,但是在傳入類型的時候,可能會牽扯到不同類型之間的裝箱和拆箱,有性能損失;泛型沒有裝拆箱,沒有性能損失
{
Console.WriteLine("這是{0},類型是{1}",obj,obj.GetType());
}

public static void ShowT<SPara>(SPara tparameter)//這個任何類型都可以用,只要傳入類型,括弧里的參數正確就ok
{
Console.WriteLine("這個是泛型類Show T,parameter={0},parameterType={1}",tparameter,tparameter.GetType());
}

public static void ShowTT<SPara,T,S>(SPara tparameter,T t,S s)//傳入多個類型
{
Console.WriteLine("這個是泛型類ShowTT,parameter={0},parameterType={1},t={2},tType={3},s={4},sType={5}", tparameter, tparameter.GetType(),t,t.GetType(),s,s.GetType());
}
}

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

public class GenericConstaint//定義泛型約束
{
//where後面意思是T不僅要是個class對象,還可以new對象(可以有無參數構造)
public static T Get<T>(T t) where T : class,new ()//必須是個引用類型,string class ....
{

//引用類型的預設值是null
T tt = new T();//約束加了new(),才能new出來

return default(T);
}

public static T GetQuery<T>(T t) where T : struct //必須是個值類型,
{//值類型的預設值不確定
return default(T);
}


public static void SayHi<T>(T t) where T:People//t必須是People類型或者people類型的子類
{
Console.WriteLine("ID:{0},Name:{1}",t.Id,t.name);
t.SayHi();
}
public interface ISaySometing
{
void SayHello();
}

}

public class People
{
public string name{set;get;}
public int Id { set; get; }

public void SayHi()
{
Console.WriteLine("上午好");
}
}

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

class Program
{

static void Main(string[] args)
{
GenericClass.show<DateTime>(DateTime.Now);

int num= GenericClass.Show<string,string>("1", 1, 1);
Console.WriteLine(num);
//在泛型的單個類型的時候,<T>是傳參數的類型;當要傳入多個參數的時候,括弧里可以有多個參數
GenericClass.Add<int>(4, "zhu", 1.0);
//object 是所有類型的父類

GenericClass.ShowObject("132");//ShowObject方法可以傳入各種類型~~~string
GenericClass.ShowObject(1231);//ShowObject方法可以傳入各種類型~~~int
GenericClass.ShowObject(DateTime.Now.Year);//ShowObject方法可以傳入各種類型~~~DateTime

GenericClass.ShowT<string>("朱凱賓");// public static void ShowT<SPara>(SPara tparameter)只要傳入相對應的T
GenericClass.ShowT<DateTime>(DateTime.Now);
GenericClass.ShowTT<DateTime,int,string >(DateTime.Now,100,"豬八戒");


Console.WriteLine("**********泛型約束****************");
//泛型約束聲明後,類型參數必須滿足約束
//GenericConstaint.Get<int>(3);// 這樣會報錯,泛型約束where是class,class是引用類型,int是值類型
// GenericConstaint.Get<string>("132");//string是引用類型,因為約束加了new(), 但是string類型是沒有無參數構造的,所有會報錯
GenericConstaint.GetQuery<int>(123);//值類型
//DateTime 是個結構體,不是引用類型
GenericConstaint.GetQuery<DateTime>(DateTime.Now);

People p = new People()
{
Id = 1,
name = "我是people"

};
GenericConstaint.SayHi<People>(p);

 

Console.ReadLine();

//用泛型沒有裝箱和拆箱,所以沒有性能損失
//用object類型的時候會有拆箱和裝箱~~~~~有性能損失



}
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、IP地址 IP 地址是網際網路上的每個網路節點在全球範圍內的唯一標識符,一個 IP 地址唯一標識一個主機(嚴格來說是標識一個網卡介面 network interface card)。 現在應用最為廣泛的是 IPv4 地址,已逐漸向 IPv6 地址切換。IPv4 地址為 32 位長,IPv6 地址為 ...
  • 1 依賴的安裝 因為JDK、Tomcat和MySQL的安裝過程中需要從網上下載部分支持包才可以繼續,所以需要提前安裝好依賴。 在windows中的控制面板中有添加/卸載程式,可以進行程式的安裝、卸載和查看功能。 在Linux中的rpm命令和windows中的添加/卸載程式功能很相似,也可以進行程式的 ...
  • echo:顯示一段文字 比如: echo hello,串口上就顯示hello echo hello > /dev/tty1, LCD上便顯示hello欄位 cat:查看一個文件的內容 比如: cat Makeflie,串口上就顯示Makeflie文件的內容 cat Makeflie > /dev/t ...
  • Unix文件是以位元組序列組成的信息載體(container),內核不解釋文件的內容。 Linux文件系統中的文件是數據的集合,文件系統不僅包含著文件中的數據而且還有系統的結構,所有Linux用戶和程式看到的文件、目錄、軟鏈接及文件保護信息等都存儲在其中。 Linux最早的文件系統是Minux,但是專 ...
  • 腳本的作用不明而喻,在無數次的啟動開發板過程中,不斷登錄確確實實占用了我大量的時間及精力; 於是上網根據自己的實際編寫了一個腳本: !/usr/bin/expect -f的意義:http://blog.csdn.net/zhu_tianwei/article/details/44180637 如果在 ...
  • 值類型:(原話定義)值類型的變數直接包含值,換言之變數引用的位置就是值在記憶體中實際存儲的位置。 這句話也就是說,值類型的賦值是不會引用同一記憶體位置的,除了out和ref參數,更改原始變數不影響其它變數的值(因為變數歌有各的位置) 棧 依次向下: int number1 =42; char lette ...
  • 如果說界面設計,那麼自適應問題一定無法避免,今天就來分享一下,wpf如何實現自適應,先看一下效果:(文末添加源代碼下載) 基本思路就是用 Grid 的網格,進行寬度的自動填充適應, 不過對於複雜的頁面,佈局起來可能比較麻煩, 這裡推薦結合 DockPanel 和 Grid 一起使用,對於頁面一些不需 ...
  • 第一步:上圖 第二步:上代碼 >>>>>>>>>>>源代碼下載<<<<<<<<< 第三步:說明 版本說明 v2.1 2017年9月28日19:37:39 qq1222698好多年不更新,應浩哥的要求,增加一些功能1、去掉自動回覆功能,加上自動發送功能2、增加回車功能、自動crc功能3、不再打包,自己 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...