接口、反射

接口

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

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 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();

 

        }

    }

}

 

效果

 

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第三方公司插件 { using 记事本公司提供的插件标准; public class PlugOne:IPlug { public string PlugName { get { return "全部变成大写"; } } public string ProcessText(string strOri) { return strOri.ToUpper(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第三方公司插件 { using 记事本公司提供的插件标准; public class PlugTwo:IPlug { public string PlugName { get { return "全部变成小写"; } } public string ProcessText(string strOri) { return strOri.ToLower(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 记事本公司提供的插件标准 { public interface IPlug { string ProcessText(string strOri); string PlugName { get; } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 记事本主程序 { using System.Reflection; using System.IO; using 记事本公司提供的插件标准; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //获取正在运行的程序集 Assembly ass = Assembly.GetExecutingAssembly(); //获取程序集的4种方法 //Assembly ass1 = this.GetType().Assembly; //Assembly[] asses = AppDomain.CurrentDomain.GetAssemblies();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值