ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 生成以及使用扩展库

生成以及使用扩展库

原创 Linux操作系统 作者:youli_113 时间:2008-01-15 15:18:17 0 删除 编辑
一切有用的东西都可以封装到库里以供复用,这是现代编程的王道。为了演示这个过程,重新建立一个.NET Library工程,然后将代码转移进去,看起来应该如下所示:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Reflection;

 

namespace MyExtensionLibrary

{

    public static class MyExtensions

    {

        public static void DisplayDefiningAssembly(this object obj)

        {

            // 该方法允许任意object显示它被定义的程序集

            Console.WriteLine("{0} lives here:\n\t->{1}\n", obj.GetType().Name, Assembly.GetAssembly(obj.GetType()));

        }

 

        public static int ReverseDigits(this int i)

        {

            char[] digits = i.ToString().ToCharArray(); // 先转换为string,再存到数组中

 

            Array.Reverse(digits);  // 逆序排列

            string newDigits = new string(digits);

 

            return int.Parse(newDigits); // 以int类型返回

        }

    }

}

    注意,如果想在库外调用这些方法,必须在类名前面加上public,因为C#默认的访问级别是private。在这里,还可以显示指明扩展应用,即在public static ...前面加上一个[Extension],当然现在并不必须这么做。

    编译完成之后回到我们原来的那个工程,添加对这个新编译出来的MyExtensionLibrary.dll的引用,修改代码如下:

using System;

using MyExtensionLibrary;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            int myInt = 12345678;

            myInt.DisplayDefiningAssembly();

 

            System.Data.DataSet ds = new System.Data.DataSet();

            ds.DisplayDefiningAssembly();

 

            System.Media.SoundPlayer sp = new System.Media.SoundPlayer();

            sp.DisplayDefiningAssembly();

 

            Console.WriteLine("Value of myInt: {0}", myInt);

            Console.WriteLine("After reversed: {0}", myInt.ReverseDigits());

 

            myInt.Foo();

            myInt.Foo("This sample is provided by SpadeQ");

 

            Console.ReadLine();

        }

    }

}

 

 

    可以得到同样的结果,就像使用普通的方法一样。所有object类型都已经被加上了DisplayDefiningAssembly()扩展,所有的int类型还被加上了ReverseDigits()扩展,前提是我们无需分拆出object和int的代码,我们甚至连它的内部结构都不知道,但仍然可以向它们的数据类型“注入”我们自己想要的函数。 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12641349/viewspace-145391/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    153
  • 访问量
    196852