惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Troy Hunt's Blog
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
F
Full Disclosure
Recorded Future
Recorded Future
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
博客园_首页
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hacker News: Front Page
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
博客园 - 司徒正美
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
Cloudbric
Cloudbric
PCI Perspectives
PCI Perspectives
有赞技术团队
有赞技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
量子位
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tailwind CSS Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
N
News and Events Feed by Topic
罗磊的独立博客
T
Threat Research - Cisco Blogs
Schneier on Security
Schneier on Security
T
Tor Project blog
IT之家
IT之家
M
MIT News - Artificial intelligence
S
Security @ Cisco Blogs
O
OpenAI News
AI
AI
S
Securelist
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
月光博客
月光博客
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题

博客园 - skylai

mvc3 小技巧 WCF学习之旅(一)---Hello World. WCF Client configuration Jquery表单验证 Jquery的一些常用信息 二进制、SOAP的序列化及反序列化 简单的Attribute实现. C#泛型之泛型委托 C#2.0泛型介绍之简单泛型类。 序列化之XML序列化(一) Vs2005的win form动态生成菜单 强制字符换行CSS版和C#版 js操作xml 读写XML文件 js的一些杂谈 一个button同时执行多个有返回值的函数的解决方法(return false; or return true;) DataGrid里应用radio单选按钮 限制字符输入(ASCII 码) 前两天刚看书看到的,来这里跟大家分享一下有关C#处理指令的问题
泛型之泛型约束
skylai · 2006-11-20 · via 博客园 - skylai

类型参数的约束
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。这些限制称为约束。约束是使用 where 上下文关键字指定的。下表列出了六种类型的约束:

T:结构

类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型.

T:类

类型参数必须是引用类型,包括任何类、接口、委托或数组类型。

T:new()

类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。

T:<基类名>

类型参数必须是指定的基类或派生自指定的基类。

T:<接口名称>

类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

T:U

为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。

下面来用实例说明一下:
<基类名>;new();
先来定义一个类


    
public class Article
    
{
        
private string m_title;
        
private DateTime m_createdate;

        
public Article()
        
{
        }


        
public Article(string title)
        
{
            
this.m_title = title;
        }


        
public string Title
        
{
            
get
            
{
                
return this.m_title;
            }

            
set
            
{
                
this.m_title = value;
            }

        }


        
public DateTime CreateDate
        
{
            
get
            
{
                
return this.m_createdate;
            }

            
set
            
{
                
this.m_createdate = value;
            }

        }

    }

接下来就是泛型约束的实现

    //指定类型参数的类型约束,这里的参数只能是Article类,并且这个类要提供一个无参数的构造函数。
    public class GenericWhere<T> where T :Article, new()
    
{
        
private T m_genwhere;
        
//声明一个类型参数的属性
        public T GenWhere
        
{
            
get
            
{
                
return this.m_genwhere;
            }

            
set
            
{
                
this.m_genwhere = value;
            }

        }


        
public GenericWhere(T genW)
        
{
            
this.m_genwhere = genW;
        }

    }


    
public class GenericWhereApply
    
{
        
public void GencWhereMethod()
        
{
            Article art 
= new Article();
            GenericWhere
<Article> gw = new GenericWhere<Article>(art);
            
//这样就可以通赤gw的GenWhere属性访问Article的所有成员。
            string str = gw.GenWhere.Title;
        }

    }


其它几种类型的约束大概的用法都差不多,它们的类型参数都需要是受约束的类型。