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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 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;
        }

    }


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