C#基础入门 五

递归

  • 递归调用:一个方法直接或间接地调用了它本身,就称为方法的递归调用。
  • 递归方法:在方法体内调用该方法本身。
  • 递归示例
public long Fib(int n)
{
if(n==0||n==1)
return n;
return Fib(k-2)+Fib(k-1);
}
  • 练习:利用递归计算1+2+3...+100的值。
static int Fun(int n){
if(n==1)
return n;
return n+Fun(n-1);
}

构造方法和析构方法

构造方法

  • 构造函数用来初始化对象。比如要建立一个铅笔的对象,那么可以用构造函数来控制它的初始状态,如长度、宽度、颜色等。
  • 构造方法必须跟类重名,构造方法没有返回值,但可以有多个重载。
  • 构造方法的本质是一个构造器,是为了类的实例化而产生的,构造方法是一种特殊的方法,只能在初始化的时候被执行,外部不能调用。
  • 构造方法可以不写,系统会默认为你的类添加一个无参构造方法。
  • 如果将构造函数设为private,则不能被外部实例化。
 public class Student
{
public int age;
public string name;
public int grade;
public Student(int a,string n, int g){
age = a; name = n; grade = g; }
} class MainClass
{ public static void Main(string[] args)
{
Student student = new Student(21, "zxh", 100);
Console.WriteLine(student.age+student.name+student.grade); }
}

析构方法

  • 析构方法用于析构类的实例,用于释放内存空间。
class Car
{
~Car()
{
//cleanup statements
}
}
  • 不能在结构中定义析构方法,只能对类使用析构方法,一个类只能有一个析构方法,无法继承或重载,无法调用析构方法,,只能自动调用,析构方法既没有修饰符,也没有参数。

面向对象程序设计

  • 面向过程:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
  • 面向对象:把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
  • 面向对象特性:封装、继承、多态。
  • OOP(面向对象编程)达到软件工程的三个主要目标:重用性、灵活性和扩展性。

封装

  • 封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(称之为类)。
  • 封装的意义在于保护或者防止代码被我们无意中破坏。
  • 封装就是对类成员的再次包装。

继承

  • 继承用于创建可重用、扩展和修改在其他类中定义的行为的新类,其成员被继承的类称为“基类”,继承这些成员的类称为“派生类”,派生类只能有一个直接基类,但是继承是可传递的,如果ClassB派生出ClassC,ClassA派生出ClassB,则ClassC会继承B和A中声明的成员。
  • 基类有的,派生类都有,派生类有的,基类可能没有,即:派生类可以赋值给基类,而基类不能赋值给派生类。public class Student:Person{} Student继承Person。
public class Person
{
public void Eat()
{
Console.WriteLine("人都要吃饭");
}
}
public class Student:Person
{
public void Learn()
{
Console.WriteLine("学生都要学习");
}
}
public class Senior : Student
{
public new void Learn(){//方法替换
Console.WriteLine("高中生要学的更多");
}
public void University()
{
Console.WriteLine("高中生要考大学");
}
}
class MainClass
{ public static void Main(string[] args)
{
Senior sen = new Senior();
sen.Learn();
sen.University();
sen.Eat(); }
} > 打印结果:
> 高中生要学的更多
> 高中生要考大学
> 人都要吃饭

多态

  • 当派生类从基类继承时,它会获得基类的所有方法、字段、属性和事件,派生类可以选择:

    • 继承最接近的基类方法而不重写它
    • 重写基类中的虚拟成员
    • 定义隐藏基类实现的成员的新非虚实现,通常我们称这为“方法替换”。
  • 虚函数:用virtual修饰的方法成为虚方法;
  • 重写:用override修饰的是方法重写;
  • 密封类:sealed修饰符,修饰类为密封的,不可被继承不可被重写,派生类可以通过sealed来停止继承,内部的方法可以通过sealed来阻止被重写。
  • 静态类被默认为密封类,所以静态类不能被继承。

C#基础入门 五的更多相关文章

  1. Mybatis框架基础入门(五)--输入映射和输出映射

    1.parameterType(输入类型) 1.1 传递简单类型 使用#{}占位符,或者${}进行sql拼接. <select id="caseCountByQueryCaseVo&q ...

  2. MyBatis基础入门《十五》ResultMap子元素(collection)

    MyBatis基础入门<十五>ResultMap子元素(collection) 描述: 见<MyBatis基础入门<十四>ResultMap子元素(association ...

  3. MyBatis基础入门《五》核心配置文件

    MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-c ...

  4. 小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础(五) Spider Middleware

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. JS基础入门篇(三十五)—面向对象(二)

    如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一)

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. 从零3D基础入门XNA 4.0(2)——模型和BasicEffect

    [题外话] 上一篇文章介绍了3D开发基础与XNA开发程序的整体结构,以及使用Model类的Draw方法将模型绘制到屏幕上.本文接着上一篇文章继续,介绍XNA中模型的结构.BasicEffect的使用以 ...

  8. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

  9. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

随机推荐

  1. fatal error: mysql.h: No such file or directory

    在ubuntu系统下安装mysql之后,和数据库连接的时候,出现如下错误:fatal error: mysql.h: No such file or directory 是因为缺少链接库,执行如下命名 ...

  2. LeetCode 177. Nth Highest Salary

    https://leetcode.com/problems/nth-highest-salary/description/ Write a SQL query to get the nth highe ...

  3. mysql-4连接

    联合多表查询 菜鸟教程join 日常应用较多的是从多个表格中获取数据.使用join可以在多个表查询进行select.update.delete. join按照功能分为三类: inner join(内连 ...

  4. mysql为什么会慢

    --2019.4.18 mysql技术大会分享--叶金荣mysql为什么会慢性能瓶颈分析.排查思路 先确认一下真的是mysql响应慢了吗导致mysql慢可能会有那些因素呢?--资源稀缺 ---cpu, ...

  5. FancyButtons一个漂亮按钮的库

      一个功能强大且全面的按钮控件,是目前我见过的最好使的按钮. 支持给按钮添加图标,并且可通过属性设置手指按钮的效果,不需要在写<selector>文件. 项目地址:https://git ...

  6. 模板引擎文档 - layui.laytpl 介绍

    <!DOCTYPE html> <html class="ui-page-login"> <head> <meta charset=&qu ...

  7. new 运算符干了什么

    为了追本溯源, 我顺便研究了new运算符具体干了什么?发现其实很简单,就干了三件事情. var obj = {}; obj.__proto__ = F.prototype; F.call(obj); ...

  8. maven 编译解决jdk 版本问题

    1.在父工程中pom 添加版本限制: <plugins> <plugin> <groupId>org.apache.maven.plugins</groupI ...

  9. Rhythmk 一步一步学 JAVA (18): Enum枚举学习

    枚举定义: public enum SizeEnum { SMALL, BIG, BIGEST }; public enum SizeStringEnum { SMALL("小") ...

  10. 什么是“堆”,"栈","堆栈","队列",它们的区别?

    堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树. 将根节点最大的堆叫做最大堆 ...