c#基础:类与接口的学习

原创 2007年09月14日 11:50:00

1、抽象(abstract) 和密封(sealed) 类
       可继承,不可实例化的类:

       public abstract  class MyClass
       
...{

       }

    
      可实例化,但不可继承:

public sealed class MyClass
...{

}


     注意:编译器不允许派生类的可访问性比基类更高。

2、继承接口
      除了以指定的方式继承类外,还可以继承接口(同样在冒号后面),例如,给MyClass类添加一个接口:

public  class MyClass :  IMyInterface
[
   
//class members .
}

     同时,接口 IMyInterface 的成员必须在支持类 MyClass 中得到实现,但如果不想使用 IMyInterafce 中的成员,
可提供一个“空”的执行方法(没有函数代码),还可以把 IMyInterface 成员实现为抽象类中的抽象成员 。
      另外,同时指定基类和接口的方法应该是

public  class MyClass :  MyBase , IMyInterface1,IMyInterface2
[
   
//class members .
}
     
3、申明接口和类是相似的,要注意的,是关键字 abstract  /  sealed 是不能在接口中使用的 ,无意义 。

一、抽象类与接口
        1、类似处:他们都包含可以由派生类继承的成员。都不能实例化,但可以声明他们的变量。如果这样做,
就可以使用多态性把继承这两中类型的对象指定给他们的变量。接着通过这些变量来使用这些类型的成员,但
不能直接访问派生对象的其它成员。 

         2、区别:派生类只能继承一个基类,即只能直接继承一个抽象类,但可以通过一个继承链来包含多个抽
象类。相反,类可以使用任意多个接口。
               按照定义,接口成员是公共的(因为它们倾向于外部使用),但抽象类的成员可以是私有的、受保护
的、内部的或受保护的内部成员。
               此外,接口不能包含字段、构造函数、静态成员或常量 。

          3、这说明这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要的特性,例
如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。

          举例说明:假如有一个对象系列表现火车,基类Train包含火车的核心定义,比如轮胎和引擎规格。但这
个类是抽象的,我们不能开着这样的火车 。所以,我们给它添加一些特性(真实的发动机、好的轮胎),得到了“蒸汽”和“汽油”火车两个派生类 Train_A 和 Train_B 。

           接着,我们来考虑,汽车做好了,我们可以用来做什么?对,搭乘客,装货物,而这两种方法我们可以
放在接口 Interface 中,这样他们就有了共同的任务。

二、结构类型
            1、结构和类非常相似,但结构是值类型的,类是引用类型的,这意味着什么?举例说明:

namespace exmaple_1
...{
     
class Myclass
    
...{
         publlic  
int  val ;
     }


    
struct   myStruct
    
...{
          
public   int   val;
    }


    
class program
   
...{
      
static void Main(String[]  args)
       
...{
             Myclass   A  
=   new  Myclass() ;
             Myclass   B  
=    A;
            A.val
=10;
            B.val
=20;
            myStruct  C 
=  new   myStruct() ;
            myStruct  D 
= C ;
            C.val
=30;
            D.val
=40;
           Console.WriteLine(
"A.val={0}", A.val) ;
           Console.WriteLine(
"B.val={0}", B.val) ;
           Console.WriteLine(
"C.val={0}", C.val) ;
           Console.WriteLine(
"D.val={0}", D.val) ;
           Console.ReadKey() ;
        }

  }

        运行后,得到的结果是 :
        A.val =20,  B.val=20 ,  C.val=30,  D.val=40 。



 

c#基础:类与接口的学习

一、抽象类与接口         1、类似处:他们都包含可以由派生类继承的成员。都不能实例化,但可以声明他们的变量。如果这样做, 就可以使用多态性把继承这两中类型的对象指定给他们的变量。接着通过这...
  • dutianen
  • dutianen
  • 2017年02月08日 09:53
  • 52

c#,一个类可以同时继承自一个普通类和一个接口

一个类,可以继承自一个普通类,继承它的成员变量和方法;也可同时继承自 一个接口,继承接口的方法并完成定义。有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完...
  • CGGUANG
  • CGGUANG
  • 2016年11月25日 23:03
  • 3065

C#中接口、基类与类

C#中,接口是一个非常重要的概念,它定义了需要实现接口的相关的类需要共同遵守的一个约定,只能包含属性、方法和函数,不能包含字段。     类只能继承一个类,不能多重继承。但可以继承多个接口。继承接口...
  • iamzxf
  • iamzxf
  • 2015年04月08日 23:23
  • 924

c#中接口实现类的动态调用实现

最近一个项目要实现接口的动态调用。一个接口有多个实现类,但是要在程 序外(比如说配置文件或者数据库表里)定义到底应该掉用哪一个实现类,这样 可以极大的提高程序的扩展性,调...
  • czcl123
  • czcl123
  • 2016年03月29日 20:04
  • 2442

基于c# 类、接口、结构的联系与区别详解

原文地址:点击打开链接 本篇文章是对c#中类与接口以及结构的联系与区别进行了详细的分析介绍,需要的朋友参考下 一.C#类与结构的差别 1. 值类型与引用类型 结构是值类型:值类型在堆栈...
  • qq798833488
  • qq798833488
  • 2015年06月25日 23:32
  • 1035

C#中基类、派生类以及使用接口来实现多重继承

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全...
  • vs_the_old_boy
  • vs_the_old_boy
  • 2016年08月02日 13:32
  • 1578

C# 类中继承接口的属性

在开发中面对接口编程,有时需要将属性放到接口中,但是在类中又要如何去继承接口的属性呢? 开始的时候,我以为只要继承了接口,就可以将属性拿来用了。代码如下: public interface I...
  • xxdddail
  • xxdddail
  • 2013年08月02日 15:50
  • 4504

C#--[反射]如何知道一个类都实现了哪些接口和从那个类继承

可能的情况有:从一个类继承,从一个或多个接口继承,从一个类和一个或多个接口继承。 使用Type类的BaseType属性来取得类从哪个类继承。GetInterfaces方法来取得类都实现了哪些接口。 ...
  • yishuaijun
  • yishuaijun
  • 2014年03月16日 23:35
  • 2536

C#详解类型基础

首先本文将会说到的知识点: 1.值类型和引用类型的原理 2.线程栈和托管堆 3.装箱和拆箱 4.类型判等 基本类型原理: c#的基本类型是按照数据在计算机内存是如何被分配来划分,一...
  • mango_love
  • mango_love
  • 2017年12月24日 11:20
  • 181

Unity 中 C# 的基础语法 以及 常用功能

1 [HideInInspector]和 [SerializeField] 变量的序列化:再次读取Unity时序列化的变量是有值的,不需要再次去复制,因为它已经被保存下来。 ...
  • wdsdsdsds
  • wdsdsdsds
  • 2016年01月20日 10:38
  • 1166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#基础:类与接口的学习
举报原因:
原因补充:

(最多只允许输入30个字)