泛型知識

来源: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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...