C#基础复习

类和继承

目录

类和继承

类继承

 访问继承的成员

所有类都派生自 object 类

 屏蔽基类的成员

基类访问

 使用基类的引用

虚方法和覆写方法

 覆写标记为 override 的方法

覆盖其他成员类型

 构造函数的执行

构造函数初始化语句

 类访问修饰符

 程序集间的继承

 成员访问修饰符

 访问成员的区域

 成员访问修饰符小结

 抽象成员

 抽象类

 密封类

静态类

扩展方法

 命名约定


类继承

派生类不能删除它所继承的任何成员

 访问继承的成员

所有类都派生自 object 类

类 object 是唯一的非派生类,因为它是继承层次结构的基础

没有基类规格说明的类隐式地直接派生自类 object

 

 屏蔽基类的成员

虽然派生类不能删除它继承的任何成员,但是可以用于基类名称相同的成员来屏蔽基类成员,这是继承的主要功能之一,非常实用

 

 

 震惊,方法可以用 new 屏蔽掉

基类访问

 使用基类的引用

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

虚方法和覆写方法

 

 

 覆写标记为 override 的方法

当通过基类(不只是最底层的基类,只要被别的类继承了就都可以是基类)调用时,调用被沿着继承层次向上传递,直到最后一层被标记为 override 标记的方法

 

 使用 new 声明 

 

 此时向上调用时在MyDerivedClass 的方法中停下了

覆盖其他成员类型

 构造函数的执行

 创建一个实例过程中完成的第一件事是初始化对象的所有实例成员。在此之后,调用基类的构造函数,然后才执行该类自己的构造函数体

构造函数初始化语句

 在基类参数列表中的参数必须在类型和顺序方面与已定的基类构造函数的参数列表相匹配

 

 类访问修饰符

类的可访问性有两个级别: public 和 internal

 

 程序集间的继承

C#允许从一个在不同的程序集内定义的基类来派生类

要从不同程序集中定义的基类派生类,必须具备一下条件:

 成员访问修饰符

 

 访问成员的区域

公有类的公有成员对同一程序集或其他程序集的所有类可见

 private 类成员只能被它自己的类成员访问,不能被其他的类访问,包括继承它的类。但是可以被嵌套在它的类中的类成员访问

 protected 访问级别如同 private 访问级别,但是它允许派生自该类的类访问该成员。即使程序集外部继承该类的类也能访问该成员

  internal 的成员对程序集内部的所有类可见,但对程序集外部的类不可见

 受保护内部成员的访问性

protected  internal 的成员对所有继承该类的类以及所有程序集内部的类可见。这是 protected 和 internal 的并集,不是交集

 成员访问修饰符小结

 

 抽象成员

 抽象成员是指设计为被覆写的函数成员,抽象成员有一下特征:

 

抽象成员只可以在抽象类中声明   一共有4个类型的成员可以声明为抽象的:  

方法  属性  事件  索引

 

 抽象类

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

不能创建抽象类的实例   抽象类使用abstract 修饰声明

 密封类

密封类只能被用作独立的类,不能被用作基类

密封类使用  sealed 修饰符标注

静态类

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

类本身必须标记为 static

using System;
using System.Collections.Generic;
using System.Text;

namespace Csharpzuoye
{
    static public class MyMath
    {
        public static float PI = 3.14f;
        public static bool IsOdd(int x) { return x % 2 == 1; }
        public static int Times2(int x) { return 2 * x; }
    }
    class Program
    {
        static void Main()
        {
            int val = 3;
            Console.WriteLine("{0} is odd {1}.", val, MyMath.IsOdd(val));
            Console.WriteLine("{0} * 2 = {1}.", val, MyMath.Times2(val));
        }
    }
}

扩展方法

在迄今为止的内容中,每个方法都和声明它的类关联。扩展方法特性扩展了这个边界,允许编写的方法和声明它的类之外的类关联

 

 

 命名约定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值