C#简单笔记07:接口Interface,泛型,索引器

接口

C#简单笔记07:接口Interface,泛型,索引器_第1张图片

接口是相当于一个大纲,列出方法,但不实现(只有方法名无方法内容).由类来实现接口.

c#中类是单继承.接口是多实现.即1个类只能继承1个类,但可以同时实现1个以上的接口.

一旦一个类实现了接口,就必须全部实现接口中定义的成员

接口不能实例化

在接口中定义方法:

1.不能添加访问修饰符,默认都是public

2.在接口中的方法不能实现.

C#简单笔记07:接口Interface,泛型,索引器_第2张图片

C#简单笔记07:接口Interface,泛型,索引器_第3张图片

    public interface 语文{ int 语文成绩 { get; } void 学语文(); }
    public interface 数学{ int 数学成绩 { get; } void 学数学(); }
    public class 人类 { public string 姓名; }
    //学生类继承了人类,并实现了两个接口:语文, 数学
    public class 学生 : 人类, 语文, 数学 {
        public int 语文成绩 { get { return 100; } }
        public int 数学成绩 { get { return 100; } }
        public void 学语文() {
            Console.WriteLine(this.姓名 + "勤劳的学习语文.语文成绩:" + this.语文成绩);                    
        }
        public void 学数学() {
            Console.WriteLine(this.姓名 + "勤劳的学习数学.数学成绩:" + this.数学成绩);
        }
    }
    class Program {
        static void Main(string[] args) {
            //学生对象拥有全部从父类和接口继承的成员
            学生 某某 = new 学生();
            某某.姓名 = "小明";//该属性来自父类人类
            某某.学语文();//该方法来自语文接口,由学生类实现
            某某.学数学();//该方法来自数学接口,由学生类实现


            //多态:使用语文接口new1个学生类的对象
            //只拥有"语文"接口的成员"学语文()"方法和"语文成绩"属性
            语文 甲 = new 学生();
            甲.学语文();

            //多态:使用数学接口new1个学生类的对象
            //只拥有"数学"接口的成员"学数学()"方法和"数学成绩"属性
            数学 乙 = new 学生();
            乙.学数学();

            Console.ReadKey();
        }
    }

泛型

C#简单笔记07:接口Interface,泛型,索引器_第4张图片

 

C#简单笔记07:接口Interface,泛型,索引器_第5张图片

C#简单笔记07:接口Interface,泛型,索引器_第6张图片

    public class Array {//自定义的数组类
        public int this [int index] {//索引器 
            set { _arr[index] = value; }
            get { return _arr[index]; }
        }
        public int Count {//属性
            get { return _count; }                     
        }
        public void Add(int value) {
            _arr[_count] = value;
            _count++; 
        }
        public void Log() {
            string info = "当前数组共" + Count + "个元素:";
            for (int i = 0; i < Count; i++) {
                info += (_arr[i] + " ");
            }            
            Console.WriteLine(info);
        }

        public Array() {//构造方法
            _arr = new int[100]; 
        }              
        private int[] _arr;
        private int _count = 0;
    }

    class Program {
        static void Main(string[] args) {
            Array arr = new Array();
            arr.Log();
            arr.Add(12);
            arr.Log();
            arr.Add(88);
            arr.Log();
            arr.Add(101);
            arr.Log();

            arr[0] = 199;//使用索引器左值set
            arr.Log();
            //使用索引器右值get
            Console.WriteLine("arr[1]=" + arr[1]);
            Console.ReadKey();
        }
    }

如上代码,使用索引器可简单管理int类型数组.美中不足是只能使用int数组,如果使用别的类型(例如single,double等)数组,还要重新再写n份代码.

使用泛型可避免这种问题.

C#简单笔记07:接口Interface,泛型,索引器_第7张图片

C#简单笔记07:接口Interface,泛型,索引器_第8张图片

    public class Array  {//自定义的泛型数组类
        public T this[int index] {//索引器 
            set { _arr[index] = value; }
            get { return _arr[index]; }
        }
        public int Count {//属性
            get { return _count; }
        }
        public void Add(T value) {
            _arr[_count] = value;
            _count++;
        }
        public void Log() {
            string info = "当前数组共" + Count + "个元素:";
            for (int i = 0; i < Count; i++) {
                info += (_arr[i] + " ");
            }
            Console.WriteLine(info);
        }
        public Array() {//构造方法
            _arr = new T[100];
        }
        private T[] _arr;
        private int _count = 0;
    }
    class Program {
        static void Main(string[] args) {
        //泛型类型数组在具体使用的时候,指定一个具体类型(例如single)定义使用
            Array < Single > arr = new Array();
            arr.Log();
            arr.Add(12);
            arr.Log();
            arr.Add(88.88f);
            arr.Log();
            arr.Add(14.55f);
            arr.Log();

            arr[0] = 1.99f;//使用索引器左值set            
            //使用索引器右值get
            Console.WriteLine("arr[1]=" + arr[1]);
            arr.Log();

            Array arr2 = new Array();
            arr2.Add("张三");
            arr2.Add("李四");
            arr2.Add("王五");
            arr2.Log();
            Console.ReadKey();
        }
    }
  • 使用泛型能够提高代码重用

  • 使用泛型时,由于类型不确定,所以我们不能使用算术运算符

C#简单笔记07:接口Interface,泛型,索引器_第9张图片

以上代码是错误的!由于num1,num2类型不确定,无法比较大小!

泛型使用大写字母含义:

泛型常用的大写字母含义

  • T - type

  • S/V/U - 第2,3,4种类型

  • K/V - key/value

  • N - number

你可能感兴趣的:(C#和.NET学习)