c# 3.0新特性之使用扩展方法

转载 2011年01月19日 18:01:00

c# 3.0新特性之使用扩展方法
2009年8月18日 云飞扬 发表评论 阅读评论
-
Extension Methods 使用扩展方法
使用的时候需要注意的地方
1.扩展方法所属的类必须为静态非泛型类,扩展方法也是静态方法
2.第一个参数为被扩展的类型实例,并且必须用this进行修饰
3.第二个参数开始对对应被扩展类型实例所传递的参数列表,即扩展类型实例
传递的第一个参数对应扩展方法定义的第二个参数,依次类推
4.被扩展类型实例可像调用类型内部定义的实例方法一样调用扩展方法

这里定义一个扩展方法:
public static class Extensions
    {
        public static bool Compare(this Customer customer1, Customer customer2)
        {
            if (customer1.CustomerId == customer2.CustomerId &&
                customer1.Name == customer2.Name &&
                customer1.City == customer2.City)
            {
                return true;
            }

            return false;
        }

    }
其中Compare第一个参数用this修饰

 

完整源码例子,这个例子主要查询新建的newCustomer是否在列表List中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NewLanguageFeatures
{
    public class Customer
    {
        public int CustomerId { get; private set; }

        public string Name { get; set; }
        public string City { get; set; }

        public Customer(int Id)
        {
            CustomerId = Id;
        }

        public override string ToString()
        {
            return Name + "/t" + City + "/t" + CustomerId;
        }
    }
    public static class Extensions
    {
        public static bool Compare(this Customer customer1, Customer customer2)
        {
            if (customer1.CustomerId == customer2.CustomerId &&
                customer1.Name == customer2.Name &&
                customer1.City == customer2.City)
            {
                return true;
            }

            return false;
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            var customers = CreateCustomers();

            var newCustomer = new Customer(10)
            {
                Name = "Stuart Glasson",
                City = "Oxford"
            };

            foreach (var c in customers)
            {
   
                if (newCustomer.Compare(c))
                {
                    Console.WriteLine("The new customer was already in the list");
                    return;
                }

            }

            Console.WriteLine("The new customer was not in the list");

        }

        static List<Customer> CreateCustomers()
        {
            return new List<Customer>
                {
                    new Customer(1) { Name = "Alex Roland",             City = "Berlin"    },
                    new Customer(2) { Name = "Oliver Cox",              City = "Marseille" },
                    new Customer(3) { Name = "Maurice Taylor",          City = "London"    },
                    new Customer(4) { Name = "Phil Gibbins",            City = "London"    },
                    new Customer(5) { Name = "Tony Madigan",            City = "Torino"    },
                    new Customer(6) { Name = "Elizabeth A. Andersen",   City = "Portland"  },
                    new Customer(7) { Name = "Justin Thorp",            City = "London"    },
                    new Customer(8) { Name = "Bryn Paul Dunton",        City = "Portland"  }
                };
        }
    }


本文来自: 本站内容欢迎转载,但是禁止去掉本文链接(转载无妨,去掉链接可耻!):http://www.ajaxcn.net/archives/180

C# 3.0新特性之扩展方法

C#3.0扩展方法是给现有类型添加一个方法。现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类。看...
  • zuo_hy
  • zuo_hy
  • 2014年07月18日 16:31
  • 362

C# 3.0 新特性 学习(二):匿名类型、扩展方法

C# 3.0 新特性 学习(二):匿名类型、扩展方法 这两天看了一下msdnwebcast上的visual studio 2008的系列课程,记录下所学的知识,以便加深记忆 1.匿名类型顾名思义 匿名...

C# 3.0新特性之扩展方法

C#3.0扩展方法是给现有类型添加一个方法。现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类。 //Demo--1 //扩展基本类型 namespace Test...

c# 3.0新特性之使用Lambda表达式

c# 3.0新特性之使用Lambda表达式2009年8月18日 云飞扬 发表评论 阅读评论 -Working with Lambda Expressions 使用Lambda表达式Lambda表达式有...
  • rise51
  • rise51
  • 2011年01月19日 18:04
  • 329

C# 3.0语言的新特性——Lambda表达式

Lambda表达式 在C# 3.0 中,Microsoft 添加了“lambda 表达式”。lamdba表达式曾经用于很久以前的LISP计算机语言中,在1936年由一个美国数学家Alonzo Chu...

Visual C# 3.0 新特性概览

http://space.itpub.net/?uid-12641349-action-viewspace-itemid-144762http://msdn.microsoft.com/zh-cn/l...

C# 3.0新特性之自动属性(Auto-Implemented Properties)

C# 3.0新特性之自动属性(Auto-Implemented Properties)2009年8月18日 云飞扬 发表评论 阅读评论 -万丈高楼平地起,基础是重中之重。所有我一定要搞点基础的东西,虽...
  • rise51
  • rise51
  • 2011年01月19日 18:09
  • 487

LINQ体验(3)——C# 3.0新语言特性和改进(下篇)

上一篇我们介绍了C# 3.0新语言特性和改进上部分,这篇我们继续介绍剩下的部分。 C# 3.0新语言特性和改进包括: 自动属性(Auto-Implemented Properties)隐含类型...

LINQ体验(2)——C# 3.0新语言特性和改进(上篇)

在第一篇中,知道了Visual Studio 2008新特性,从这篇开始进入此系列的第二部分——介绍C# 3.0新语言特性和改进。 总体来说,Visual Studio 2008和.NET ...

C# 3.0特性之Lambda表达式

源地址 http://www.cnblogs.com/SpadeQ/articles/1246226.html C# 3.0特性之Lambda表达式 A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# 3.0新特性之使用扩展方法
举报原因:
原因补充:

(最多只允许输入30个字)