1. 程式人生 > >泛型約束(值型別和引用型別)

泛型約束(值型別和引用型別)

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

    public void SayHi()
    {
        Console.WriteLine("morning!");
    }
}

 public class GenericConstrint
{
   public static void Show<T>(T tValue) where T : People
   {
       tValue.SayHi();
   }

   ///
<summary>
/// 值型別約束 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> public static T GetValue<T>(T t) where T : struct { return default(T); } /// <summary> /// 引用型別約束 /// </summary> /// <typeparam name="T">
</typeparam>
/// <param name="t"></param> public static T GetRef<T>(T t) where T : class { return null;//引用型別,所以可以返回null } }

使用程式碼:

GenericConstrint.GetValue<decimal>(100m);
GenericConstrint.GetValue<int>(100);
GenericConstrint.GetValue<float>(100f);
GenericConstrint.GetRef<string>("1234"); GenericConstrint.GetRef<People>(p);

相關推薦

約束型別引用型別

public class People { public int Id { get; set; } public string Name { get; set; } publi

JS引數傳遞傳遞引用傳遞

前端紅寶書第一遍看過去之後,相當多的東西都忘記了,第二遍看的時候,也開始注意到一些細節的東西以及理解不到位的地方。書P66 一個加粗框中寫到:ECMAScript中所有引數傳遞都是值,不可能通過引用傳遞引數當時看過沒有怎麼仔細想過,一知半解吧,今天理解的更加深一些。當然也是昨

js 中引數傳遞傳遞引用傳遞

js中的引數傳遞包括值傳遞和引用傳遞 1.值傳遞(數字,字串等) 例如: $(function(){ var str="11"; test1(str); alert(str);//值傳遞測試 結果:11 }) function test1(str){ s

c#中的型別引用型別 裝箱拆箱 好文

  一,c#中的值型別和引用型別      眾所周知在c#中有兩種基本型別,它們分別是值型別和引用型別;而每種型別都可以細分為如下型別:       什麼是值型別和引用型別 什麼是

型別引用型別,深層複製淺層複製深拷貝淺拷貝最詳細了

要知道深層複製淺層複製的區別,首先要了解值型別和引用型別。變數分值型別和引用型別,深層複製和淺層複製都是針對引用型別變數的操作。值型別: 比如數值,字串,布林,undifined引用型別 : 比如陣列,物件,函式來張圖(手抖,有點醜):var num = 77;var id

JAVA中型別引用型別的不同面試常考

轉載:https://www.cnblogs.com/1ming/p/5227944.html1、 JAVA中值型別和引用型別的不同?[定義] 引用型別表示你操作的資料是同一個,也就是說當你傳一個引數給另一個方法時,你在另一個方法中改變這個變數的值,那麼呼叫這個方法是傳入的變

C#面試問題整理1型別引用型別

2.值型別 C#的所有值型別均隱式派生自System.ValueType: 結構體:struct(直接派生於System.ValueType); 數值型別: 整型:sbyte(System.SByte的別名),short(System.Int16),int(System.Int32),long(

C#型別引用型別的引數傳遞ref,out

C#中有兩種型別,值型別,和引用型別。在記憶體中值型別是直接儲存在記憶體的棧中的,引用型別在棧中存放一個地址,這個地址指向堆中的資料(引用型別的資料是存放在堆中的)下面我們來看看兩種型別引數傳遞有什麼區別先看一個例子 /// <summary>    ///   

記憶體探尋1之——型別引用型別的記憶體分配機制

String物件和值型別的記憶體分配機制:           同樣由前延伸,上上篇《由String型別分析,所產生的對引數傳遞之惑的解答》中,最後提及,如果將引用型別的按值傳遞和按引用傳遞,用託管堆表

C#約束 轉載

六種型別的約束: T:結構 型別引數必須是值型別。可以指定除 Nullable 以外的任何值型別。有關更多資訊,請參見使用可空型別(C# 程式設計指南)。 T:類 型別引數必須是引用型別,包括任何類、介面、委託或陣列型別。

PHP變數的型別引用型別

PHP 變數在記憶體中儲存的並不直接是值的內容而是值的地址。比如: $a = 1; 從表面上看起來似乎是 $a 直接儲存了 1 這個值。但是實際情況是,PHP 直譯器建立了變數 $a , 將值 1 存入記憶體中的某個地方,再將值的地址存到變數中。 需要取值時,先找到變數中 $a 的地址,再根

js中型別引用型別的區別(無舉例)

js中的變數型別有哪些? (1)值型別:字串string、數值number、布林值boolean、undefined (2)引用型別:物件object、陣列array、函式function 值型別和引用型別的區別 (1)值型別: 1⃣️佔用空間固定,儲存在棧中(當一個方法

基本型別引用型別作為引數傳遞重要

基本型別和引用型別作為引數傳遞 引用型別資料和基本型別資料作為引數傳遞有沒有差別呢?我們用如下程式碼進行說明,並配合圖解讓大家更加清晰 1.基本資料型別傳遞 基本型別作為引數傳遞時,其實就是將基本型別變數x空間中的值複製了一份傳遞給呼叫的方法show(),當在show()方法中

型別 引用型別

值型別 /** 值型別**/ // number 型別 var a = 100 var b = a a = 200 console.log(b) //100 // string 型別 var s

[10]基本型別引用型別的引數傳遞

前言:主要為個人筆記 基本型別 程式碼: class Demo{ public static void main(String[] args){ int x=4;

Js型別引用型別

   由JavaScript 中的變數型別傳遞方式,分為值型別和引用型別,值型別變數包括 Boolean、String、Number、Undefined、Null,引用型別包括了 Object 類的所有,如 Date、Array、Function 等。在引數傳遞方式上,值型別是按

C# 型別引用型別

值型別:int double char decimal bool enum struct 存在棧上 引用型別:string 陣列 自定義類 集合 object 介面   存在堆上 值型別在複製的時候,傳遞的是值本身, 引用型別:自定義類 引用型別在複製的時

對JS型別引用型別的整理

Js變數型別:值型別和引用型別 1.值型別佔用空間固定,儲存在棧中。 2.儲存和複製的都是本身 3.用typeof可以檢測資料型別 4.基本資料型別資料是值型別 1.引用型別佔用空間不固定,儲存在堆中。 2.儲存的是指向物件的指標。 3.用instanceof去

型別引用型別之間的區別是什麼?

宣告一個值型別變數,編譯器會在棧上分配一個空間,這個空間對應著該值型別變數,空間裡儲存的就是該變數的值。引用型別的例項分配在堆上,新建一個引用型別例項,得到的變數值對應的是該例項的記憶體分配地址,這就像您的銀行賬號一樣。 直白點兒說:值型別就是現金,要用直接用;

Swift 型別 引用型別的區別

本文參考 : The Swift Programming Language 值型別 值型別包括結構體, 列舉, 所有的基本型別(整數, 浮點數, 布林值, 字串, 陣列, 字典, 元組), 都是值型別 值型別被賦予給一個變數, 常數或者本身