.net3.5 新特性

用this关键字为类添加扩展方法

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace test

{

    class Class1

    {

        public string code = "2";

        private void Show()

        {

            Console.Write(this.GetAddress());

        }

    }



    public static class Class2

    {

        public static string GetAddress(this Class1 c1)

        {

            switch (c1.code)

            {

                case "1":

                    return "北京";

                case "2":

                    return "上海";

                default:

                    return "杭州";

            }

        }

    }

}

也可以为一个接口扩展方法,实现该接口的类将也会拥有该方法

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace test

{

    interface Inter

    {

        public string Code { get; set; }

    }

    public class Class1 : Inter

    {

        private void Show()

        {

            Console.Write(this.GetAddress());

        }



        private void Haha()

        {

            Console.Write("哈哈".GetHaha());

        }



        public string Code

        {

            get;

            set;

        }

    }



    public static class Class2

    {



        public static string GetAddress(this Inter c1)

        {

            switch (c1.Code)

            {

                case "1":

                    return "北京";

                case "2":

                    return "上海";

                default:

                    return "杭州";

            }

        }



        public static string GetHaha(this string str)

        {

            return str + "哈哈";

        }

    }

}

反射:

.NET反射的定义:审查元数据并收集关于它的类型信息的能力。

 程序集:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace ClassLibrary1

{

    public interface IWel

    {

        String Print();

    }



    public class Arithmetic:IWel

    {

        int _num1;

        public int Num1 { get { return _num1; } set { _num1 = value; } }

        int _num2;

        public int Num2 { get { return _num2; } set { _num2 = value; } }



        public Arithmetic() { }



        public Arithmetic(int num1, int num2)

        {

            _num1 = num1;

            _num2 = num2;

        }



        public String Add(int num1, int num2)

        {

            Console.WriteLine("{0}+{1}={2}", num1, num2, num1 + num2);

            return "Add(int num1,int num2)方法是一个公有的带参数的方法";

        }



        private string Add()

        {

            return "Add()方法是一个私有的不传参数的方法";

        }



        private void Subtration(int num1, int num2)

        {

            Console.WriteLine("{0}-{1}+Subtration(int num1,int num2)" +

                "方法是一个私有的带参数的方法", num1, num2, num1 - num2);

        }



        public static void Multiplication(int num1, int num2)

        {

            Console.WriteLine("{0}*{1}={2} Multipcation(int num1,int num2)" +

                "是一个公有的带参数的静态方法", num1, num2, num1 * num2);

        }



        private static void Multiplication()

        {

            Console.WriteLine("Multiplication()是一个公有的不带参数的方法";

        }



        #region Iwel 成员

        public string Print()

        {

            return "欢迎你的使用接口";

        }

        #endregion

    }

}

控制台代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using ClassLibrary1;

using System.Reflection;



namespace ConsoleApplication1

{

    class Program

    {

        delegate void TestDelegage(int num1, int num2);

        static void Main(string[] args)

        {

            Assembly assembly = Assembly.Load("ClassLibrary1");

            Console.WriteLine("得到这个里面所有的类");

            foreach (Type var in assembly.GetTypes())

            {

                Console.WriteLine(var.Name + "是ClassLibrary1命名空间下的类");

            }



            Console.WriteLine("得到这个里面所有的模块集");

            Module[] modules = assembly.GetModules();

            foreach (Module va in modules)

            {

                Console.WriteLine(va.Name);

            }



            Type type = typeof(ClassLibrary1.Arithmetic);

            Console.WriteLine("{0}是不是public类型{1}", type, type.IsPublic);



            PropertyInfo[] memberinfo = type.GetProperties();//得到类的属性

            foreach (PropertyInfo var in memberinfo)

            {

                Console.WriteLine(type + "类的属性有" + var.Name);

            }



            Type[] t=type.GetInterfaces();

            foreach(Type var in t)

            {

                Console.WriteLine(var.Name+"是接口");

            }



            MethodInfo[] method = type.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic);

            foreach (MethodInfo var in method)

            {

                Console.WriteLine("私有方法:方法名={0} 方法信息={1}", var.Name, var);

            }



            MethodInfo[] methodpublic = type.GetMethods(BindingFlags.Instance | BindingFlags.Public);

            foreach (MethodInfo var in methodpublic)

            {

                Console.WriteLine("公有方法:方法名={0} 方法信息{1}", var.Name, var);

            }



            MethodInfo[] methodstatic = type.GetMethods(BindingFlags.Public | BindingFlags.Static);

            foreach (MethodInfo var in methodstatic)

            {

                Console.WriteLine("静态公有方法名={0} 方法信息={1}", var.Name, var);

            }



            MethodInfo[] methodprivatestatic=type.GetMethods(BindingFlags.NonPublic|BindingFlags.Static)

            foreach(MethodInfo var in methodprivatestatic)

            {

                Console.WriteLine("静态私有方法={0} 方法信息{1}",var.Name,var);

            }



            ConstructorInfo[] con=type.GetConstructors();

            foreach(ConstructorInfo var in con)

            {

                Console.WriteLine(var);

            }

            

            object obj=Activator.CreateInstance(type,null);

            MethodInfo men1=type.GetMethod("Add");

            Console.WriteLine("调用{0}方法",men1);

            object[] nums1={5,4};

            Console.WriteLine(men1.Invoke(obj,nums1));



            MethodInfo men2=type.GetMethod("Add",BindingFlags.Instance|BindingFlags.NonPublic);

            Console.WriteLine(men2.Invoke(obj,nums1));



            MethodInfo men3=type.GetMethod("Multiplication",BindingFlags.Public|BindingFlags.Static);

            object[] nums2={5,6};

            men3.Invoke(null,nums2);



            MethodInfo men4=type.GetMethod("Multiplication",BindingFlags.Static|BindingFlags.NonPublic);

            men4.Invoke(null,null);



            TestDelegage dele=(TestDelegage)Delegate.CreateDelegate(typeof(TestDelegage),obj,"Subtration");

            dele(9,3);

        }

    }

}

特性:明天再看吧

你可能感兴趣的:(.net)