您的位置:首页 > 其它

接口、反射

2016-09-13 20:04 190 查看
接口
接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和接口可以实现接口。
1. 接口是一个引用类型,通过接口可以实现多重继承。

2. C#中接口有new、public、protected、internal、private等修饰符。

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

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

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

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

7. 接口成员不能有static、abstract、override、virtual修饰符,使用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 S
c1f9
ystem.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 item
in 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();

 

        }

    }

}

 
效果
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: