封装                                                                                              

     对象的内部数据不应该从对象的实例直接访问,如果调用者想改变对象的状态就要使用访问方法(getter)和修改方法(setter),封装提供了一种保护状态数据完整性的方法,可用于验证输入数据是否符合业务规则。
  • 实现方式
    • 访问方法和修改方法
    • 属性

继承                                                                                             

     新的类可以从其他类中继承利用他们既有的功能。这是通过以下方式实现的:在声明类时,在类名称后放置一个冒号,然后在冒号后指定要从中继承的类(即基类)。
  • 语法
public class A
{
public A() { }
} public class B : A
{
public B() { }
}
  • 代码重用
    • is-a:继承
    • has-a:包含、委托模型
  • 基类
     一个类只能有一个直接的基类,子类将继承基类的所有非私有功能,但可以继承多个接口,这样可以构造灵活的接口层次来建模复杂的行为。
    • 初始化调用

默认在子类的构造函数执行之前调用基类的构造函数,之后为基类的公共属性创建状态。实现子类时最好是显示的调用合适的基类的构造函数,减少对继承的初始化成员的调用次数。

    • 关键字
      • base:子类需要调用基类的字段或方法时可以使用该关键字
  • 密封类

密封类是不可以被继承的,在设计工具类时对类进行密封是很有意义的

    • 关键字
      • sealed
    • 代码示例
public sealed class D
{
// Class members here.
}
  • 嵌套类

在类或结构内部定义的类型称为嵌套类型,不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。嵌套类型(或内部类型)可访问包含类型(或外部类型)。

    • 语法
class Container
{
class Nested
{
Nested() { }
}
}
    • 访问包含类型

将其作为构造函数传递给嵌套类型

public class Container
{
public class Nested
{
private Container m_parent; public Nested()
{
}
public Nested(Container parent)
{
m_parent = parent;
}
}
}
    • 实例化
Container.Nested nest = new Container.Nested();

多态                                                                                             

     通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C# 中的每种类型都是多态的。类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object 当作基类型。
  • 方法重写

由子类重新定义基类中的方法,可使用base关键字调用基类的方法

    • 关键字
      • virtual:基类中的需要子类实现的方法可以使用该关键字
      • override:派生类需要实现基类中的方法可以使用该关键字
  • 成员投影

如果子类中定义了一个成员与基类的成员一致,则我们称之为成员投影。可以使用new关键字调用新成员而不是被替换的旧成员,将子类实例强制转换成基类实例时才可以调用隐藏的基类成员。一般在无法更改基类代码的情况下可以使用此方法进行成员替换。

    • 关键字
      • new
  • 密封虚成员

用于密封从基类继承的虚方法,以防止本类的派生类重写此方法。

    • 关键字
      • sealed:使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。
    • 代码示例
public class D : C
{
public sealed override void DoWork() { }
}
  • 抽象类
     抽象类不能实例化,抽象类的用途是提供多个派生类可共享的基类的公共定义,可用于建模。
    • 关键字
      • abstract :使用 abstract 关键字可以创建仅用于继承用途的类和类成员,即定义派生的非抽象类的功能。
    • 抽象方法

抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。

    • 代码示例
public abstract class A
{
public abstract void DoWork(int i);
}
    • 虚方法声明为抽象
     如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。
// compile with: /target:librarypublic class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
} public abstract class E : D
{
public abstract override void DoWork(int i);
} public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}
  • 多态接口
     定义一个抽象类并定义许多抽象成员,这样派生类必须实现所有的抽象成员,也就强制了每一个后代具有的多态接口。     
  • 基类和派生类的转换规则
    • 规则一:可以使用基类保存任意的派生类型,并且这是安全的,这叫做隐式转换。
    • 规则二:反之,需要使用强制转换操作符进行显示的向下转换。

.NET 面向对象基础的更多相关文章

  1. 了解JavaScript 面向对象基础 & 原型与对象

    面向对象语言中的对象 老是能听到什么基于对象, 面向对象. 什么是对象, 如果有面向对象基础的人可以无视了, 下面举个简单的例子给大家讲讲面向对象中, 对象的定义, 这个是比较通用的, 不过对于JS来 ...

  2. MYSQL、PHP基础、面向对象基础简单复习总结

    一.MYSQL         1.配置MySql                 第一步安装服务器(apache).                 第二部安装MySql界面程序         2 ...

  3. 从零开始学Python第六周:面向对象基础(需修改)

    标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  4. python面向对象基础

    面向对象基础 1. 简述 编程方式: 面向过程: 根据代码在脚本的堆叠顺序,从上到下依次执行 函数式编程:将相同功能的代码封装到函数中,直接调用即可,减少代码重复性 面向对象:对函数进行分类和封装,将 ...

  5. java基础学习05(面向对象基础02)

    面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...

  6. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  7. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  8. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  9. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  10. 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

    [重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder   1.String String是Java中的一个final ...

随机推荐

  1. IT职场人的“存在主义”

      人生在世,最重要的一条就是:找准你的位置.也就是,你的定位问题. 就在前两天,参加一次社交活动,一知名培训师回顾过往,感慨地说:一个好的培训师,一定要定位好自己的客户群,根据他们的需求做好自己的定 ...

  2. centos

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...

  3. @Autowired的使用

    1.benas的xml文件中需要加入如下代码 <bean class="org.springframework.beans.factory.annotation.AutowiredAn ...

  4. 更好的pip工作流

    转自:http://codingpy.com/article/a-better-pip-workflow-recommended-by-kenneth/ 现在大家开发Python应用时,在代码库的根目 ...

  5. shell浅谈之九子shell与进程处理

    转自:http://blog.csdn.net/taiyang1987912/article/details/39529291 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] ...

  6. MFC 文件遍历

    对文件的操作MFC提供了CFileFind 类,运用此类,我们可以轻松的多文件进行操作 假设我们删除当前目录下所有jpg格式的图片: CFileFind finder; CFile fp; bool ...

  7. HCTF时PHP WAF然有RLFI漏洞

    tips:from菜鸡队长 这次去打HCTF决赛,用了这个自己写的WAF,web基本上没被打,被打的漏洞是文件包含漏洞,这个功能在本人这个waf里确实很是捉急,由于只是简单检测了..和php[35]{ ...

  8. Zabbix监控php-fpm status

    开启php-fpm status php-fpm.conf pm.status_path = /statusx45 nginx.conf location ~ /(statusx45)$ { incl ...

  9. linux 下向github上传代码

    上传代码: cd TPS/devices/M8 git init                      #//初始化 git add .                    #如果是.表示上传全 ...

  10. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...