C#有关继承知识点

C#有关继承的知识点

  1.继承的定义和声明格式

  通过继承我们可以定义新类。已存在的类称为基类(base class),新类称为派生类(derived class)。

  派生类扩展它的基类,不能删除它所继承的任何成员。

  声明格式如下:

  class OtherClass : SomeClass

  {

    ...

  }

  2.访问继承的成员

  继承的成员可以被访问,就像派生类自己声明的一样。

  所有类都派生自object类,object类是唯一的非派生类,它是继承结构的基础。

  代码例子如下: 

  class SomeClass
  {
    public string Field1 = "base class";
    public void method1(string value)
    {
      Console.WriteLine("Base Class -- Method1: {0}" ,value);
    }
  }  

  class OtherClass : SomeClass
  {
  public string Field2 = "dribed class";
  public void method2(string value)
    {
      Console.WriteLine("Drived Class -- Method2: {0}" , value);
    }
  }

  class Program
  {
  static void Main(string[] args)
    {
    OtherClass oc = new OtherClass();
    oc.method1(oc.Field1);
    oc.method1(oc.Field2);
    oc.method2(oc.Field1);
    oc.method2(oc.Field2);
    }
  }

  3.屏蔽基类的成员

  派生类不能删除它继承的任何成员,但是可以用与基类成员名称相同的成员来屏蔽(mask)基类成员。

  (1)要屏蔽一个继承的数据成员,需要一个新的相同类型的成员,并使用相同的名称。

  (2)使用new修饰符,可以让编译器“故意”屏蔽继承成员,否则,编译器会警告:隐藏了一个继承成员。

  (3)也可以屏蔽静态成员。 

  class SomeClass
  {
    public string Field1 = "base class";
    public void method1(string value)
    {
      Console.WriteLine("Base Class -- Method1: {0}" ,value);
    }
  }  

  class OtherClass : SomeClass
  {

    new public string Field1 ;

    new public void method1(string value)
    {
      Console.WriteLine("Base Class -- Method1: {0}" ,value);
    }

  }

  4.基类访问

  如果派生类必须访问被隐藏的继承成员,可以使用基类访问表达式。

  Console.WriteLine("{0}" ,base.Field1);

  5.使用基类引用(使用类型转换符)

  派生类的实例由基类的实例加上派生类新增的成员组成,派生类的引用指向整个类的对象,包括基类部分。

  如果有一个派生类对象的引用,就可以获取对象基类部分的引用。

  MyDerivedClass derived = new MyDerivedClass() ;

  MyBaseClass mvcl = new  (MyBaseClass )derived  ;//转换引用

  6.虚方法和复写方法

  虚方法可以使基类的引用访问“升至”派生类  

  class MybaseClass
  {
    virtual public void Print()
    {
      Console.WriteLine("This is the base class.");
    }
  }

  class MyDerivedClass : MybaseClass
  {
    public override void Print()
    {
      Console.WriteLine("This is the derived class.");
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      MyDerivedClass derive = new MyDerivedClass();
      MybaseClass mybc = (MybaseClass)derive ;
      derive.Print();
      mybc.Print();
    }
  }

  7.派生类成员的构造函数

  创建一个实例过程

  (1)初始化对象的所有实例化成员

  (2)调用基类的构造函数

  (3)执行自己的构造函数

  8.抽象类

  抽象类是指设计为被继承的类,抽象类只能被用作其他类的基类。

  不能创建抽象类的实例。

  数据成员(字段和常量)不能被申明abstract

  声明:

  abstract class MyClass

  {

  }

  9.静态类

  静态类中的所有成员都是静态的。静态类用于存放不受实例数据影响的数据和函数。静态类的一个常见用途可能就是创建一个包含一组数学方法和值的数学库。

  类本身必须标记为static

  类的所有成员必须是静态的

  类可以有一个静态构造函数,但不能有实例构造函数。

  静态类是密封的,不能继承静态类。 

  static public class Mymath
  {
    public static float PI = 3.14F;
    public static bool IsOdd(int x)
    {
      return (x % 2 == 1);
    }
    public static int Times(int x)
    {
      return (2 * x) ;
    }
  }

  %取余运算符  5 % 2 = 1 ;

         2 % 5 = 2 ;

  存在负号时

  if |x| > |y|  reasult : x + y ;  -6 % 5 = 1

  else  result : x ;       6 % 5 = 1;         

                 5 % -6 = 5 ; 

  10.扩展方法

  几种方法可以实现增加类的额外功能

  (1)假如有源代码,我们可以修改类,增加一个新方法。

  (2)如果不能修改类(类在第三方库中),只要它不是密封,我们可以继承它。

  (3)在另一个类中,使用该类的共有成员再编写一个方法。

  介绍扩展方法,代码如下

  sealed class MyData
  {
    private double D1, D2, D3;
    public MyData(double d1 , double d2 , double d3)
    {
      D1 = d1; D2 = d2; D3 = d3;
    }

    public double Sum() { return D1 + D2 + D3; }
  }

  static class ExtendMyData    //扩展方法的类必须声明为static
  {
    public static double Average(this MyData md)  //扩展方法本身必须声明为static  关键字this必须作为第一个参数
    {
      return md.Sum() / 3;
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      MyData md = new MyData(3 , 4 , 5);
      Console.WriteLine("Average: {0}", md.Average());
    }
  }

时间: 2024-10-12 11:34:04

C#有关继承知识点的相关文章

MDN——javascript——入门——第三章对象——对象.构造函数.原型链.继承——知识点总结

对象Object 由属性property(变量).方法method(函数)组成 var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value } member(成员)的值是任意的, 一个如上所示的对象被称之为对象的字面量(literal)——手动的写出对象的内容来创建一个对象.不同于从类实例化一个对象,我们会在后面学习这种方式. 访问对象成员 1.点表示法

继承知识点总结

1. 继承中的初始化顺序: 类内部有:属性.方法. 类初始化: 在new创建对象时,首先对对象属性和初始化块分配内存,并执行默认初始化.如果存在父类,则先为父类对象属和初始化块先分配内存并执行初始化. 然后执行父类构造器中的初始化程序,接着才开始对子类的对象属性和初始化块执行初始化. 注: 1. 在对象初始化阶段,属性和方法均针对子类可以从父类继承过来的属性和方法而言,一般而言,都是针对父类中非private而言的. 因为private修饰的为父类所特有的,子类没有继承过来,当new子类时,无须

继承知识点 和注意事项

继承extends 1提高代码复用性 2让类和类之间产生关系.有了这关系,才有了多太特性. 注意: 千万不要为了获取其他类的功能,简化代码而继承 必须是类与类之间有所属关系才可以继承, JAVA语言中,JAVA只支持单继承,不支撑多继承. 因为多继承容易带来安全隐患: 当多个父类中定义了相同功能, 当功能内容不同时 不确定要运行哪一个 但JAVA保留了这种机制,并用另一种体现形式来完成表示,多实现 JAVA支持多层继承. 也就是一个继承体系. 如何使用一个继承体系中的功能? 想要使用体系,先查阅

【python】-- 类的多继承、经典类、新式类

继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承. class SchoolMember(object): #SchoolMember类 '''学校成员基类''' def tell(self): print("the schoolmeber is tell...") class School(ob

Python学习之旅—面向对象进阶知识:类的命名空间,类的组合与继承

前言 上篇博客笔者带领大家初步梳理了Python面向对象的基础知识,本篇博客将专注于解决三个知识点:类的命名空间,类的组合以及面向对象的三大特性之一继承,一起跟随笔者老看看今天的内容吧. 1.类的命名空间 在上一篇博客中,我们提到过对象可以动态添加属性,一起来回忆下昨天的知识点,看如下的代码: class A: pass a = A() a.name = 'alex' print(a.name) 这里我们手动为a对象添加了一个属性name,然后直接打印可以得到a对象的名称.通过这个例子,我们可以

Javascript基础篇小结

Javascript基础篇小结 字数9973 阅读3975 评论7 喜欢28 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器本身也是一个应用程序 浏览器本身只懂得解析HTML 调用浏览器这个应用程序的一个功能绘制 1.javascript介绍 JavaScript操作DOM的本质是=获取+触发+改变 目的:就是用来操作内存中的DOM节点 修改D

父类子类有相同的变量声明

public abstract class A {     int i=1;     public void printI() {       System.out.println("i="+i);     }   }     public class B  extneds A{     int i=2;     public static void main(String[] args) {       B b=new B();       b.printI();     }   }

javascript笔记基础总结篇

Created at 2016-09-24 Updated at 2016-10-02 CategoryFront-End TagJavascript 转载请声明出处博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器本身也是一个应用程序 浏览器本身只懂得解析 HTML 调用浏览器这个应用程序的一个功能绘制 1.javascript介绍 JavaScript 操作 

第4周学习总结

20165226 2017-2018-3 <Java程序设计>第4周学习总结 教材学习内容总结 第五章 子类与父类 类的继承知识点 (1)java不支持多重继承,也就是说子类至多只能有一个父类 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承 (4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承.