接口、反射

来源:互联网 发布:网络重口君 编辑:程序博客网 时间:2024/06/06 03:08

接口

接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和接口可以实现接口。

1. 接口是一个引用类型,通过接口可以实现多重继承。

2. C#中接口有newpublicprotectedinternalprivate等修饰符。

3. 接口中只能声明抽象成员(所以不能直接对接口进行实例化(即不能使用new操作符声明一个接口的实例对 象)),而不能声明共有的域或者私有的成员变量。

4. 接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。

5. 接口名称一般都以“I”作为首字母(当然不这样声明也可以),这也是接口和类的一个区别之一。

6. 接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定任何访问修饰符,否则 编译器会报错。

7. 接口成员不能有staticabstractoverridevirtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new

8. 在声明接口成员的时候,不准为接口成员编写具体的可执行代码,也就是说,只要在对接口进行声明时指明接口的成员名称和参数就可以了。

9. 接口一旦被继承,子类需要把接口中所有成员实例化(通过具体的可执行代码实现接口抽象成员的操作)。

代码

 

CAR

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace jiekou

{

    interface Car

    {

        void Drive();

    }

}

Benz

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace jiekou

{

   public  class Benz:Car

    {

       public void Drive()

       {

           Console.WriteLine("奔驰!");

       }

    }

}

BMW

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace jiekou

{

    class BMW:Car

    {

        public void Drive()

        {

            Console.WriteLine("宝马!");

        }

    }

}

Program

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace jiekou

{

    class Program

    {

        static void Main(string[] args)

        {

            List<Car> list =new List<Car> {

            new Benz{},

            new BMW{}

            };

            foreach (var itemin list)

            {

                item.Drive();

            }

            Console.Read();

        }

    }

}

效果

 

 

反射

 Reflection,中文翻译为反射。

反射的定义:审查元数据并收集关于它的类型信息的能力,元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

反射的作用

1、可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型

2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射

3、反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能

 

代码

 

Student

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace 面向对象

{

   public  class Student

    {

        public string  Sid {get; set; }

        public string  Sname {get; set; }

        public int Sage {get; set; }

        public string  Ssex {get; set; }

        public string  Shobby {get; set; }

    }

}

Program

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace 面向对象

{

    class Program

    {

        static void Main(string[] args)

        {

            Student stu = new Student();

            //stu.Sid = "1";

            //stu.Sname = "邵瑞";

            //stu.Sage = 21;

            //stu.Ssex = "女";

            //stu.Shobby = "听音乐";

        }

    }

}

 

 

Program

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Reflection;

namespace fanshe

{

    class Program

    {

        static void Main(string[] args)

        {

            //加载程序集

            Assembly ass = Assembly.Load("面向对象");

            //使用反射创建一个Student的对象

            object obj = ass.CreateInstance("面向对象");

            面向对象.Student stu =new 面向对象.Student();

            stu.Sid = "1";

            stu.Sname = "邵瑞";

            stu.Sage = 21;

            stu.Ssex = "女";

            stu.Shobby = "听音乐";

            Console.WriteLine(stu.Sid);

            Console.WriteLine(stu.Sname);

            Console.WriteLine(stu.Sage);

            Console.WriteLine(stu.Ssex);

            Console.WriteLine(stu.Shobby);

            Console.Read();

 

        }

    }

}

 

效果

 

0 0
原创粉丝点击