接口,泛型

接口:接通过使?接?,可以在选件类中,例如,包括从多个源的?为。 由于C#语?不?持多重继承,所以该功
   能很重要。 此外,您必须使?接?,如果要模拟结构的继承,因为它们不能从另?个结构或选件类实际继承。
   通过使?interface关键字,定义?个接?。

   实现接?的任何类或结构必须实现其所有成员的?法。
   接?不能直接实例化, 但是可以通过指向?类间接实例化。
   接?可以包含?法和属性的声明,但不能包含字段。
   接?中所有?法、属性默认为public,不能在后?再添加修饰符。
   类或结构可以实现多个接?。 类可以继承基类并实现?个或多个接?。

   接?与抽象类?常相似,它定义了?些未实现的属性和?法。所有继承它的类都继承这些成员,在这个?度上,
   可以把接?理解为?个类的模板。 接?最终的?的是起到统?的作?。

   抽象类除拥有抽象成员之外,还可以拥有?抽象成员;?接?所有的成员都是抽象的。抽象成员可以是私有的,

   ?接?的成员默认是公有的。接?中不能含有构造函数、析构函数、静态成员和常量。
   C#只?持单继承,即?类只能继承?个?类,??个?类却能够实现多个接?。

    interface IUSB
    {
        string[] Datas{
            get;
            set;
        }
        void Read(string[] datas);
    }
    interface IBlueTooth {
        void Write(string[] datas);
    }
    class Video {
    }
    class Mp3 : Video, IUSB, IBlueTooth {

        protected string[] datas;

        public string[] Datas
        {
            get { return datas; }
            set { datas = value; }
        }
        //实现IUSB的方法
        public void Read(string[] datas) {
            Console.WriteLine("从电脑中读取数据");
            foreach (string item in datas)
            {
                Console.WriteLine("读取数据是:{0}", item);
            }
        }
        //实现Bluetooth的方法
        public void Write(string[] datas) {
            Console.WriteLine("往电脑中写数据");
            foreach (string item in datas) {
                Console.WriteLine(item);
            }
        }

    }

泛型:我们在编写程序时,经常遇到两个模块的功能?常相似,只是?个是处理int
   数据,另?个是处string数据,或者其他?定义的数据类型,但我们没有办
   法,只能分别写多个?法处理每个数据类型,因为?法的参数类型不同。

   你可能会想到?object,来解决这个问题。但是,缺陷的:
   1.会出现装箱、折箱操作,这将在托管堆上分配和回收?量
   的变量,若数据量?,则性能损失?常严重。
   2.在处理引?类型时,虽然没有装箱和折箱操作,但将?到
   数据类型的强制转换操作,增加处理器的负担。

C#中的泛型能够将类型作为参数来传递,即在创建类型时??个特定的符号如“T”来作为
?个占位符,代替实际的类型,等待在实例化时??个实际的类型来代替。

泛型有点:?、使?泛型类型可以最?限度地重?代码、保护类型的安全以及提?性能。
     ?、降低了强制转换或装箱操作的成本或?险。
     三、 可以对泛型类进?约束以访问特定数据类型的?法。

泛型参数:在泛型类型或?法定义中,类型参数是客户端在实例化泛型类型的变量时指定
     的特定类型的占位符。

     1.类型参数并不是只有?个,可以有多个。
     2.类型参数可以是编译器识别的任何类型。
     3.类型参数的名字不能随便起,不能重名。

     在定义泛型类时,可以对客户端代码能够在实例化类时?于类型参数
     的类型种类施加限制。 如果客户端代码尝试使?某个约束所不允许的
     类型来实例化类,则会产?编译时错误。 这些限制称为约束。 约束是
     使? where 上下?关键字指定的。

泛型类:泛型类封装不是特定于具体数据类型的操作。泛型类最常?于集合。
    像从集合中添加和移除项这样的操作都以?体上相同的?式执?,与
    所存储数据的类型?关。

    创建泛型类的过程为:从?个现有的具体类开始,逐?将每个类型更
    改为类型参数,直?达到通?化和可?性的最佳平衡。

泛型方法:创建泛型?法的过程和泛型类相似。泛型?法是使?类型参数声明的?法

class MyList<T>
    {
        T[] arr = new T[2];
        public MyList(T a, T b) {
            T[] temp = {a,b};
            arr = temp;
        }

        private int count;

        public int Count
        {
            get { return count; }
            set { count = value; }
        }
        public void Clear() {
            arr = null;
        }
        public void Show()
        {
            foreach (T x in arr)
            {
                Console.Write(x+"  ");
            }
            Console.WriteLine();
        }
        public void Add(T a) {
            T[] temp = new T[arr.Length + 1];
            for (int i = 0; i < arr.Length ; i++)
            {
                temp[i] = arr[i];
            }
            temp[arr.Length] = a;
            arr = temp;
        }
        public void Insert(T value, int index){
            T[] temp = new T[arr.Length + 1];
            for (int i = 0; i < index; i++)
            {
                temp[i] = arr[i];
            }
            temp[index] = value;
            for (int i = index+1; i < arr.Length+1; i++)
            {
                temp[i] = arr[i-1];
            }
            arr = temp;
        }

        public void Reverse() {
            for (int i = 0; i < arr.Length/2; i++)
            {
                T temp = arr[i];
                arr[i] = arr[arr.Length - 1 - i];
                arr[arr.Length - 1 - i] = temp;
            }
        }
    }
MyList<int> test = new MyList<int>(3, 5);
            test.Show();
            test.Add(6);
            test.Show();
            test.Insert(1, 2);
            test.Show();
            test.Reverse();
            test.Show();
时间: 2024-11-08 18:57:53

接口,泛型的相关文章

接口,泛型,可变参数在代码向上抽去中的应用探究

JAVA作为一种面向对象的语言,类和对象可以说是搭建起JAVA体系的基本框架,我们可以将类看做是对众多实体对象共性的向上抽取,而接口则是对类共性的向上抽取,我将接口理解为一种规则,一种规范,同时也是多态的应用中我们作为形式参数传递的最顶层的父类,因此接口的功能非常强大(能装B),我们在sun公司定义的API中可以经常看到它的身影,它也是架构师手中搭建框架的利器,因此以后我们会经常使用到它(能装B). ------------------------------------------------

Java实训笔记(二)——-抽象类-接口-泛型-集合

1.1方法的可变参数从JDK1.5之后,定义方法时参数的个数可以变化语法:最后一个数据类型后增加3个点注意:1.可变参数只能处于参数列表的最后:2.一个方法中最多只能包含一个可变参数:3.可变参数的本质就是一个数组,因此在调用一个包含可变参数的方法时,既可以传人多个参数,也可以传入一个数组.1.2装箱与拆箱基本数据类型与对应的封装类之间能够自动进行转换,其本质是Java的自动装箱与拆箱过程.-装箱是指将基本类型数据值转换成对应的封装类对象,即将栈中的数据封装成对象存放到堆中的过程.-拆箱是装箱的

C#笔记(十四)——接口泛型

接口与泛型 1.接口的定义:访问修饰符interface接口名{成员} 2.接口是一个抽象的该年,目的在于子类实现它 3.接口通常用来定义不同类之间的统一的标准 4.接口的成员:包括方法.属性.事件.索引.不能有字段 5.接口成员不能加修饰符,默认为public并且要求实现类(子类)去实现接口里的所有接口成员 6.接口和抽象类一样,是抽象的概念,所以不能创建对象(不能new) 7.如果一个类实现多个接口,接口之间用逗号"," 8如果一个类同时继承一个父类,又实现一个或多个接口,那么父类

c#笔记(十一)————接口泛型

1. 接口: 定义IBattle接口.声明攻击Attack(),移动Move(), 跳跃Jump()等方法:    定义IRest接口.声明SitDown(),Sleep()等方法:    定义Soldier(战士).Master(法师).Assassin(刺客).Archer(弓箭手)等类,继承上述接口,并实现内部方法. 2. 定义MyList类,该类模拟一个动态数组,可以用来存放数据(以int类型为例).实现如下功能: 1)定义属性Count,表示当前动态数组存放的int型元素个数: 2)定

Java——集合(Collection接口),迭代器,增强for循环,泛型

一.集合 Collection接口中的方法是集合中所有实现类必须拥有的方法. ArrayList implements List List extends Collection 1.基本使用 其他 import java.util.ArrayList; /* * 集合体系, * 目标 集合本身是一个存储的容器: * 必须使用集合存储对象 * 遍历集合,取出对象 * 集合自己的特性 */ public class ArrayListDemo { public static void main(St

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>

我的学习之路_第六章_迭代器,泛型

[Collection] 类 接口类 所属包:java.util.Collection Collection类是集合的最顶层的接口,定义了集合共性的方法. 接口无法创建对象,使用多态的方式创建对象 Collection<集合中的数据类型(泛型)> 变量名 = new ArrayList<集合中的数据类型(泛型)>(); Collection接口常用子类接口有: List接口 set接口 List接口常用子类有: ArrayList类 LinkedList类 set接口常用的子类有:

集合【迭代器、增强for、泛型】

java.util.Collection接口 是集合的最顶层的接口,定义了集合共性的方法 接口无法直接创建对象,使用多态的方式创建对象 Collection<集合中的数据类型(泛型)> coll = new ArrayList<集合中的数据类型(泛型)>(); 迭代器 集合中存储数据的方式(数据类型)不一样,取出集合中元素的方式也不同,java给我们提供了一种公共的取出元素的方式,叫迭代器 描述迭代器的接口:java.util.Iterator 接口中的抽象方法: boolean

泛型详解

泛型详解 泛型概述 泛型概述:限定集合存储的数据类型,Collection<E>其中E代表引用数据类型,如果加上了该引用数据类型,表示该集合中只能存储改类型对象,或者该类型的子类对象 泛型用来灵活地将数据类型应用到不同的类.方法.接口当中.将数据类型作为参数传递. 泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型. 泛型的由来 当没有指定泛型时,默认类型为Object类型.Object代表任意的数据类型(所有类都是object的子类),(返回值类型是object类型,所以用obje

计算机程序的思维逻辑 (37) - 泛型 (下) - 细节和局限性

35节介绍了泛型的基本概念和原理,上节介绍了泛型中的通配符,本节来介绍泛型中的一些细节和局限性. 这些局限性主要与Java的实现机制有关,Java中,泛型是通过类型擦除来实现的,类型参数在编译时会被替换为Object,运行时Java虚拟机不知道泛型这回事,这带来了很多局限性,其中有的部分是比较容易理解的,有的则是非常违反直觉的. 一项技术,往往只有理解了其局限性,我们才算是真正理解了它,才能更好的应用它. 下面,我们将从以下几个方面来介绍这些细节和局限性: 使用泛型类.方法和接口 定义泛型类.方