C# where用法解析

where 子句用于指定類型約束,這些約束可以作為泛型聲明中定義的類型參數的變量。
1.接口約束。
例如,可以聲明一個泛型類 MyGenericClass,這樣,類型參數 T 就可以實現 IComparable<T> 接口:

public class MyGenericClass<T> where T:IComparable { }

2.基類約束:指出某個類型必須將指定的類作為基類(或者就是該類本身),才能用作該泛型類型的類型參數。
這樣的約束一經使用,就必須出現在該類型參數的所有其他約束之前。
class MyClassy<T, U>
where T : class
where U : struct
{
}

3.where 子句還可以包括構造函數約束。
可以使用 new 運算符創建類型參數的實例;但類型參數為此必須受構造函數約束 new() 的約束。new() 約束可以讓編譯器知道:提供的任何類型參數都必須具有可訪問的無參數(或默認)構造函數。例如:
public class MyGenericClass <T> where T: IComparable, new()
{
// The following line is not possible without new() constraint:
T item = new T();
}
new() 約束出現在 where 子句的最后。

4.對于多個類型參數,每個類型參數都使用一個 where 子句,
例如:
interface MyI { }
class Dictionary<TKey,TVal>
where TKey: IComparable, IEnumerable
where TVal: MyI
{
public void Add(TKey key, TVal val)
{
}
}

5.還可以將約束附加到泛型方法的類型參數,例如:

public bool MyMethod<T>(T t) where T : IMyInterface { }

請注意,對于委托和方法兩者來說,描述類型參數約束的語法是一樣的:

delegate T MyDelegate<T>() where T : new()





泛型的Where

  泛型的Where能夠對類型參數作出限定。有以下幾種方式。

  ·where T : struct 限制類型參數T必須繼承自System.ValueType。
 
  ·where T : class 限制類型參數T必須是引用類型,也就是不能繼承自System.ValueType。

  ·where T : new() 限制類型參數T必須有一個缺省的構造函數

  ·where T : NameOfClass 限制類型參數T必須繼承自某個類或實現某個接口。

  以上這些限定可以組合使用,比如: public class Point where T : class, IComparable, new()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457521.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu進入桌面自動啟動腳本_在 Ubuntu 下開機自啟動自己的 QT 程序而不啟動 Ubuntu 的桌面...

1. /etc/profile 方式實現這個功能&#xff0c;要完成兩步&#xff1a;1、系統設置-> 用戶賬戶-> 點擊我的賬戶-> 點擊右上角的解鎖-> 打開自動登錄-> 點擊右上角的鎖定-> 退出系統設置2、在 /etc/profile 文件的開頭添加執行 qt 程序的命令。如&#xff1a;…

Java obj與JSON互轉(jackson)

JSON 解析 常見的json解析器&#xff1a; jsonlibGson(谷歌)fastjson(阿里)jackson(Spring內置) jackson 依賴jar包 jackson-annotations/jackson-core/jackson-databind/ 官網下載地址 1. Java對象轉JSON 1.1 核心對象 ObjectMapper 1.2常用轉換方法 writeValue(參…

如何制作一個簡單的APP應用軟件?

如今隨著移動智能手機的普及&#xff0c;讓APP的市場一片繁榮&#xff0c;現在市場上的APP數量數不勝數&#xff0c;對于APP開發的我們很多外行人也許認為&#xff0c;開發APP是不是特別難&#xff0c;是不是只有資歷很高的程序員才能夠完成這個任務&#xff0c;或者說要想開發…

I/O重定向

每個進程都至少有3個信息&#xff1a;“標準輸入”stdin、“標準輸出”stdout、和“標準出錯”stderr。標準輸入通常來自鍵盤&#xff0c;標準輸出和標準錯誤輸出通常被發往屏幕&#xff08;并不會保存在磁盤文件中&#xff09;。有些時候&#xff0c;需要從文件讀取輸入&#…

java 自動裝拆箱

title: “java 自動裝拆箱” tags: Java 將基本數據類型封裝成對象的過程叫做裝箱&#xff08;boxing&#xff09;&#xff0c;反之基本數據類型對應的包裝類轉換為基本數據類型的過程叫做拆箱&#xff08;unboxing&#xff09;; 基本數據類型與其他對象的區別 基本數據類型 …

設計模式11---組合模式(Composite Pattern)

一、組合模式定義 將對象組合成樹形結構以表示“部分-整體”的層次結構&#xff0c;使得用戶對單個對象和組合對象的使用具有一致性。Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compos…

Linux 多核下綁定硬件中斷到不同 CPU(IRQ Affinity)

轉載 - Linux 多核下綁定硬件中斷到不同 CPU&#xff08;IRQ Affinity&#xff09; 作者 digoal 日期 2016-11-20 標簽 Linux , IRQ , 中斷 , CPU親和 , 綁定中斷處理CPU 背景 原文 http://www.vpsee.com/2010/07/load-balancing-with-irq-smp-affinity/ 原文 硬件中斷發生頻繁…

請列舉你了解的分布式鎖_這幾種常見的“分布式鎖”寫法,搞懂再也不怕面試官,安排!...

什么是分布式鎖&#xff1f;大家好&#xff0c;我是jack xu&#xff0c;今天跟大家聊一聊分布式鎖。首先說下什么是分布式鎖&#xff0c;當我們在進行下訂單減庫存&#xff0c;搶票&#xff0c;選課&#xff0c;搶紅包這些業務場景時&#xff0c;如果在此處沒有鎖的控制&#x…

leetcode 268

等差數列求值 1 class Solution {2 public:3 int missingNumber(vector<int>& nums) {4 int nnums.size();5 int kn*(n1)/2;6 for(int i0;i<n;i)7 k-nums[i];8 return k;9 } 10 }; 轉載于:https://www.cnblogs.…

301緩存重定向?301 Moved Permanently (from disk cache)

今天在寫一個博客系統時&#xff0c;發現首頁數據經常刷新不出來&#xff0c;甚至后端根本就沒有接受到這個請求&#xff0c;以為是Ajax的問題&#xff0c;但通過抓包發現Ajax請求確實已經發出去了&#xff0c;但狀態碼是 301 Moved Permanently (from disk cache),301是永久重…

Firefox 50優化Electrolysis

Mozilla正式發布Firefox 50。最新的版本中提升了來自多個內容進程用戶的用戶體驗&#xff0c;并修復了十幾個高影響的安全漏洞。\\在Firefox最新版本的變更中&#xff0c;我們注意到了它對于Electrolysis的進一步改進。Electrolysis是Mozilla實現在后臺進程中呈現和執行web相關…

ModuleNotFoundError: No module named '_ctypes' ERROR:Command errored out with exit status 1: python

Ubuntu下載 nginx 時報錯&#xff1a; ERROR: Command errored out with exit status 1:command: /usr/local/bin/python3.7 -c import sys, setuptools, tokenize; sys.argv[0] ""/tmp/pip-install-7e0xdb36/uwsgi/setup.py""; __file__""/tmp…

python opc plc_PYthon簡易OPC數據采集寫入Access

利用hollias comm opcserver 與Python實現交互。代碼如下&#xff1a;# -*- coding: utf-8 -*-from sys import *from getopt import *#from os import * 造成f open(test.txt, r) TypeError: an integer is required錯誤import signalimport sysimport osimport typesimport …

邊工作邊刷題:70天一遍leetcode: day 73

Read N Characters Given Read4 I/II 要點&#xff1a;這題的要點就是搞清楚幾個變量的內在邏輯&#xff1a;只有buffer是整4 bytes的。而client要讀的bytes&#xff08;需求&#xff09;和實際上disk上有的bytes&#xff08;供給&#xff09;都是不整的。所以&#xff0c; 循環…

javascript時間戳和日期字符串相互轉換

1 <html xmlns"http://www.w3.org/1999/xhtml">2 <head>3 <meta http-equiv"Content-Type" content"text/html; charsetutf-8" />4 <script type"text/javascript">5 // 獲取當前時間戳(以s為單位)6 var time…

wireshark 十六進制過濾_CTF流量分析之wireshark使用

01.基本介紹在CTF比賽中&#xff0c;對于流量包的分析取證是一種十分重要的題型。通常這類題目都是會提供一個包含流量數據的pcap文件&#xff0c;參賽選手通過該文件篩選和過濾其中無關的流量信息&#xff0c;根據關鍵流量信息找出flag或者相關線索。pcap流量包的分析通常都是…

vim 插件管理

1  進入自己的vim mkdir ./bundle/vundle 2  在vimrc同級中執行 git clone https://github.com/gmarik/vundle.git ./bundle/vundle 將一些插件文件 下載到./bundle/vundle中 3  編寫自己的vim配置&#xff0c;其實很簡單 set nocompatible " be iMp…

ubuntu install wiznote

sudo add-apt-repository ppa:wiznote-team #添加官方源sudo apt-get update #更新源sudo apt-get install wiznote #安裝為知筆記

python 對象序列化 pickling_python操作文件——序列化pickling和JSON

當我們在內存中定義一個dict的時候&#xff0c;我們是可以隨時修改變量的內容的&#xff1a;>>> ddict(namewc,age28)>>>d{name: wc, age: 28}我們可以隨時修改name和age的值。但是當我們重新運行程序的時候&#xff0c;name、age的初始化值還是wc和28&#…

python實現Redis訂閱發布

Redis 發布訂閱 Redis 發布訂閱可以用在像消息通知&#xff0c;群聊&#xff0c;定向推送&#xff0c;參數刷新加載等業務場景 發布訂閱模型有三個角色&#xff1a; 發布者&#xff08;Publisher&#xff09;訂閱者(Subscriber)頻道(channel) 每個訂閱者可以訂閱多個頻道&am…