`
zhangziyangup
  • 浏览: 1187459 次
文章分类
社区版块
存档分类
最新评论

C#基础知识整理:C#类和结构(4)

 
阅读更多

1、什么是接口? 功能特性? 实现代码?
接口就是使用interface关键字定义的,由类的成员的组合组成的,描述一些功能的一组规范。在C#中可以看到,系统的一些接口都是这样命名的:IComparable(类型的比较方法)、ICloneable(支持克隆)、IDisposable(释放资源)等等,I表示接口,able则反映了接口的特性:“能... ...”,表明这一组规范能干什么。
(1)、接口实现

   public interface IPrintAble
    {
        void PrintString();

        void PrintInt();

        void PrintBool();
    }

    public interface IComputeAble
    {
        void HandlerString();

        void HandlerInt();

        void HandlerBool();
    }

    public class MyInplementInterface : IPrintAble, IComputeAble
    {
        //隐式实现
        public void PrintString()
        {
            Console.WriteLine(@"1");
        }

        public void PrintInt()
        {
            Console.WriteLine(1);
        }

        public void PrintBool()
        {
            Console.WriteLine(true);
        }

        public void HandlerString()
        {
            Console.WriteLine(@"1" + "1");
        }

        public void HandlerInt()
        {
            Console.WriteLine(1 + 1);
        }

        public void HandlerBool()
        {
            Console.WriteLine(true || false);
        }

        //显示实现
        //void IComputeAble.HandlerString()
        //{
        //    throw new NotImplementedException();
        //}

        //void IComputeAble.HandlerInt()
        //{
        //    throw new NotImplementedException();
        //}

        //void IComputeAble.HandlerBool()
        //{
        //    throw new NotImplementedException();
        //}
    }
      class Program
    {
        static void Main(string[] args)
        {
            MyInplementInterface imple = new MyInplementInterface();

            imple.PrintString();

            imple.PrintInt();

            imple.PrintBool();

            imple.HandlerString();

            imple.HandlerInt();

            imple.HandlerBool();

            Console.ReadLine();
        }
    }

结果:

(2)实现专用接口,即C#已经定义好的接口
例:

    public class ImplementSysInterface : IComparable
    {
        public int CompareTo(object obj)
        {
            //可以根据需要实现自己的比较方法
            return 0;
        }

        private void UsingMenthod()
        {
            //报错,因为NoIDisposeableClass没有实现IDisposable接口,所以不支持using
            //using (NoIDisposeableClass my = new NoIDisposeableClass())
            //{

            //}
            //实现IDisposable接口后,可以使用using
            using (IDisposeableClass my = new IDisposeableClass())
            {

            }
        }
    }

    public class NoIDisposeableClass
    {

    }

    public class IDisposeableClass : IDisposable
    {
        #region IDisposable 成员

        public void Dispose()
        {
            
        }

        #endregion
    }

接口有如下特性:
a、接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员:
b、当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。
例如:

   public class MyInplementInterface2 : IComputeAble
    {
        void IComputeAble.HandlerString()
        {
            Console.WriteLine(@"1" + "1");
        }

        void IComputeAble.HandlerInt()
        {
            Console.WriteLine(true || false);
        }

        void IComputeAble.HandlerBool()
        {
            Console.WriteLine(true || false);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IComputeAble imple2 = new MyInplementInterface2();

            imple2.HandlerString();

            Console.ReadLine();
        }
    }

c、当隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是公有的。
d、接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。
e、接口成员是自动公开的,且不能包含任何访问修饰符。
f、接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。

2、什么是泛型? 泛型有哪些优点?
所谓泛型,是将类型参数的概念引入到.NET,通过参数化类型来实现在同一份代码上操作多种数据类型。是引用类型,是堆对象。
其实,一开始学泛型,是在学习java的时候,当时没有搞明白,我一直都觉得泛型纯属多此一举,用object一样可以搞定。比如,如下,比如,有人以类型的值,都要打印出来,于是object实现:

    public class Test
    {
        private object model;

        public object Model
        {
            get
            {
                return model;
            }

            set
            {
                model = value;
            }
        }

        public Test(object model)
        {
            this.Model = model;
        }

        public void ShowRecord()
        {
            Console.WriteLine(model);
        }
    }
   class Program
    {
        static void Main(string[] args)
        {
            int recordI = 2;

            bool recordB = true;

            Test testI = new Test(recordI);

            testI.ShowRecord();

            Test testB = new Test(recordB);

            testB.ShowRecord();

            Console.ReadLine();
        }
    }

但是当学的多了,就会发现还是有一定的问题的。首先,就是装箱问题,int是值类型,赋值给object类型时,要完成一次装箱操作。什么是装箱?就是把recordI值复制到新的object分配的空间。浪费了时间和性能。所以泛型还是有作用的,那么,用泛型来实现:

  public class TestGeneric<T>
    {
        private T model;

        public T Model
        {
            get
            {
                return model;
            }

            set
            {
                model = value;
            }
        }

        public TestGeneric(T model)
        {
            this.Model = model;
        }

        public void ShowRecord()
        {
            Console.WriteLine(model);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int recordI = 2;

            bool recordB = true;

            TestGeneric<int> testGI = new TestGeneric<int>(recordI);

            testGI.ShowRecord();

            TestGeneric<bool> testGB = new TestGeneric<bool>(recordB);

            testGB.ShowRecord();

            Console.ReadLine();
        }
    }

这样,当TestGeneric<int> testGI = new TestGeneric<int>(recordI)时,T就是int了,用不着装箱了。
当然泛型不仅仅是要解决装箱问题,功能特性如下:
a、避免装箱拆箱,提高了性能;
b、提高了代码的重用性;
c、类型安全的,因为在编译的时候会检测;
d、可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。

分享到:
评论

相关推荐

    C#知识整理(完整)

    本资源提供了C#基础知识的系统整理,对于期末考试有一定的帮助作用。下面是从给定的文件中生成的相关知识点: 第一章 1. C#应用程序可以使用除Word应用程序以外的工具和方法进行开发。 2. 命名空间可以签到。 3. ...

    个人整理的C#教程知识手册

    一、C#基础 C#的基础部分涵盖了语法、变量、数据类型、控制结构(如if语句、switch语句、循环)、函数、类和对象等核心概念。理解这些基础知识是构建任何C#程序的基石。此外,手册可能还会涉及命名空间、接口、继承...

    文件整理基础部分C#代码

    【标题】"文件整理基础部分C#代码"的描述中提到了C#编程语言的应用基础知识,这可能包括了变量声明、数据类型、控制结构(如if语句、for循环、while循环)、函数定义与调用、类与对象、继承、接口、异常处理等核心...

    C#常用知识整理

    以上就是C#常用的知识点,掌握这些基础知识将有助于你构建和维护高质量的C#应用程序。在实际编程过程中,还需要不断学习和理解更高级的主题,如并发处理、单元测试、设计模式等,以提升专业技能。

    测试c#基础考题测试

    ### C#基础知识及计算机原理 #### 题目解析 **Question1.** - **问题描述不清晰,无法直接给出知识点,但从题目编号判断可能是C#语言的基础概念。** **Question2.** - **选项含义不明,但根据题目描述猜测可能...

    C#高级编程知识点总结

    第五章讨论了对象和类型,如引用传递与值传递的区别,值类型和引用类型的赋值行为,以及结构和类的差异。属性提供了一种封装数据的方式,Object类是所有.NET类的基类。 后续章节继续涵盖了数组和集合、委托和事件、...

    C#笔记整理

    一、C#基础 1. 变量与数据类型:C#支持基本数据类型如int、float、double、bool,以及引用类型如string、object等。变量必须先声明后使用,遵循强类型检查。 2. 控制流:包括条件语句(if-else、switch)、循环...

    c#版数据结构和算法

    本资源“c#版数据结构和算法”正是针对这一需求而整理的,旨在帮助开发者深入理解数据结构和算法,并能在C#环境中熟练运用。 数据结构是存储和组织数据的方式,它提供了一种高效管理和访问数据的方法。常见的数据...

    c#试题 基础测试

    从给定的C#基础测试题目中,我们可以总结出一系列重要的C#编程概念和知识点,这对于初学者理解和掌握C#语言的基本原理非常有帮助。以下是根据题目内容整理的关键知识点: ### 1. 抽象类与抽象方法 - **抽象类**:不...

    C# in depth要点整理(一张A4纸, 打印版)

    本文档基于博主wjason在iteye博客上分享的内容,将关键知识点提炼成便于打印和学习的A4纸格式。以下是文档中涵盖的一些核心C#知识点: 1. **基础语法**: - 变量声明与类型:了解C#中的基本数据类型(如int、...

    C#.Net基础 基础入门知识 范例 ppt 实例 可以直接运行

    "PPT实例"通常用于教学或演示,其中可能包含了关于C#.Net的逐步教程,涵盖了变量、数据类型、控制结构、类与对象、异常处理、文件操作等基础知识。通过PPT,学习者可以更直观地理解编程概念。 "xmind"文件可能是一...

    C#期末考试复习题整理

    7. **C#的集成开发环境(IDE)组件**:C#的IDE主要包括通用语言运行时CLR、基础类库、ADO.NET(数据库访问技术)、ASP.NET(网络应用开发)和Win Forms(Windows编程)。 8. **程序设计过程**: - **问题建模**:...

    C#课程设计基础实训报告

    本次实训的主要目的是让学生掌握C#中的类设计与操作,巩固课堂所学理论知识,如面向对象编程、命名空间、程序集和文件的使用。通过实训,学生能够将理论知识与实际编程相结合,理解并熟练运用C#的面向对象特性,提升...

    c#入门经典中文整理doc版全本

    1. **C#基础语法**:C#的基本结构包括变量、数据类型、常量、运算符等。变量用于存储数据,数据类型决定了变量可以存储的数据种类。运算符则用于处理这些数据,如算术运算符(+,-,*,/)和逻辑运算符(&&,||,!)...

    c#的学习课件,平时比较常用的

    1. **C#基础**: - 变量与数据类型:C#支持多种数据类型,包括整型、浮点型、字符型、布尔型等,还有引用类型如类、接口、数组。 - 控制流:如条件语句(if-else)、循环(for、while、do-while)和开关语句...

    C# .net面试题整理集合

    【C# .NET面试题整理集合】 在C#和.NET技术领域中,面试通常会涵盖以下几个核心知识点: 1. **基础语法与数据类型**:理解C#的基本语法,包括变量声明、常量、数据类型(如int、string、bool、float等)以及它们的...

    C#6.0 语言规范中文版.pdf

    这些概念是理解和运用C# 6.0不可或缺的基础知识。例如: 类型:是数据的蓝图,是定义值和变量的集合以及操作这些值的方法。 变量:是存储数据的容器,它们具有类型和一个名称。 转换:允许将值从一种类型转换为另...

    C#相关API部分整理

    在这里,你可以找到关于C#的基础语法、控制结构、类与对象、异常处理、文件操作、网络编程等方面的详尽资料。对于初学者,这是一个非常宝贵的资源,能够帮助快速上手C#编程。同时,W3CSchool还提供了代码示例和在线...

    C#编程公开课开发笔记 学习知识概括 2014 07 09

    在2014年的这个C#编程公开课中,我们可能会学习到C#语言的基础知识,包括但不限于语法、类与对象、数据类型、控制结构、函数、异常处理、集合、泛型、面向对象编程(OOP)原则等核心概念。 1. **C#基础语法**:C#的...

Global site tag (gtag.js) - Google Analytics