泛型类和扩展方法

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 泛型类扩展方法

{

class Holder<T>

{

T[] vars = new T[3];

public Holder(T v0,T v1,T v2)

{

vars[0] = v0;

vars[1] = v1;

vars[2] = v2;

}

public T[] GetValues()

{

return vars;

}

}

/*扩展方法的要求:

*1、声明为static

*2、是静态类的成员

*3、第一个参数类型中必须有关键词this,后面是扩展的泛型类的名字

*/

static class ExtendHolder

{

public static void Print<T>(this Holder<T> h)

{

T[] vlas = h.GetValues();

Console.WriteLine("{0},\t{1},\t{2}",vlas[0],vlas[1],vlas[2]);

}

}

class Program

{

static void Main(string[] args)

{

var intHolder = new Holder<int>(3, 5, 7);

var stringHolder = new Holder<string>("asd","dfew","vrfa");

intHolder.Print();

stringHolder.Print();

Console.ReadKey();

}

}

}

时间: 2024-11-05 18:50:45

泛型类和扩展方法的相关文章

关于泛型类和扩展方法的一点思考

我们经常通过泛型构造函数创建泛型实例,也常调用实例的扩展方法.以下的代码在项目中随处可见: static void Main(string[] args) { var strs = new List<string> {"hello","world"}; var result = strs.Where(s => s.StartsWith("h")); foreach (var item in result) { Console.W

扩展方法用法及其原理和注意事项

前言 一直以来尤其像C#一些常见的语法,本人更愿意去探讨其内部实现的原理,为什么要这么做呢?只是为了当我真正在开发中运用语法的时候不会因为犯常识性错误或者说因为一些注意事项未曾注意到而耽误一些无谓的时间,同时也能理解的更深入而不是仅仅停留在表面(或许理解也不是太透).(当然本人能力有限,太高深的东西必定是研究不明白了,也只有这能力了). 概念 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例

C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢? 首先,假设我们的项目中有一个类,后来过了一段时间,我们明确的知道需要为该类添加一个新功能,考虑这个需求有两个解决办法: (1)直接修改当前类的定义 这样做的缺点是,破坏向后的兼容性,可能以前使用的旧代码无法通过编译.比如说旧代码使用了一个Methed(int,int)的方法,但是为了满足新功能我

C#扩展方法应用之 try catch finally 封装

本文将介绍如何利用扩展方法将 try catch finally 语句块简化成如下的调用形式: public void Test1() { Employee emp = new Employee(); emp.Try(p => p.Work()) .Catch(e => HandleException(e)) .Finally(p => p.Rest()); } 虽然这样做似乎节省不了太多代码,但看起来更工整一点.下面介绍如何实现: 一. try public class TryUnit

C#扩展方法知多少

前言:上篇 序列化效率比拼——谁是最后的赢家Newtonsoft.Json 介绍了下序列化方面的知识.看过Demo的朋友可能注意到了里面就用到过泛型的扩展方法,本篇打算总结下C#扩展方法的用法.博主打算分三个层面来介绍这个知识点,分别是:.Net内置对象的扩展方法.一般对象的扩展方法.泛型对象的扩展方法. 什么是扩展方法?回答这个问题之前,先看看我们一般情况下方法的调用.类似这样的通用方法你一定写过: static void Main(string[] args) { string strRes

.NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以,跟着本篇的步伐,继续来围观. /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 6.扩展方法 7.系统内置委托 Func / Acti

匿名类、匿名方法、扩展方法

/* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 6.扩展方法 7.系统内置委托 Func / Action 8.Lambda表达式 9.标准查询运算符 Standard Query Operator 10.LINQ查询表达式 一.匿名类 1.1 不好意思,我匿了 在开发中,我们有时会像下面的代码一样声明一个匿名类:可以看出,在匿名

【转载】C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢? 首先,假设我们的项目中有一个类,后来过了一段时间,我们明确的知道需要为该类添加一个新功能,考虑这个需求有两个解决办法: (1)直接修改当前类的定义 这样做的缺点是,破坏向后的兼容性,可能以前使用的旧代码无法通过编译.比如说旧代码使用了一个Methed(int,int)的方法,但是为了满足新功能我

c# 扩展方法奇思妙用基础篇五:Dictionary&lt;TKey, TValue&gt; 扩展

Dictionary<TKey, TValue>类是常用的一个基础类,但用起来有时确不是很方便.本文逐一讨论,并使用扩展方法解决. 向字典中添加键和值 添加键和值使用 Add 方法,但很多时候,我们是不敢轻易添加的,因为 Dictionary<TKey, TValue>不允许重复,尝试添加重复的键时 Add 方法引发 ArgumentException. 大多时候,我们都会写成以下的样子: var dict = new Dictionary<int, string>()