一、类和结构:

  相同点:

  1. 类和结构都是创建对象的模板,包含数据成员和方法成员

  不同点:

  1.在内存中的存储方式:

    1)类是存储在堆内存上的引用类型,结构是存储在栈内存的值类型

    2)结构不支持继承

二、类的成员:

  类的成员包含:数据成员和函数成员

  1.数据成员:

    数据成员包含:字段、常量、事件成员

  2.函数成员:

  方法参数传递:

    1) 除非特别指定,所有的引用类型都是通过引用传递,所有的值类型都是通过值来传递。引用类型作为参数传递的时候,传递的是引用,修改会影响原始数据;值引用传递的数据的副本,不会影响原有的数据。

    2)ref 参数:可通过ref参数将值参数通过引用传递给方法,目的是为了在值传递时改变原有数据

    3)out参数:out参数可以使一个方法输出多个值,同时在参数前加上out前缀后,传递给方法的变量可以不被初始化。

    4)可选参数:可选参数必须有默认值,并且必须是方法定义的最后的参数

  属性访问器:

    get/set访问器:

      1)get访问器不带任何参数,必须返回属性声明的类型。set默认会有一个value参数

      2)可以为get设置共有的属性访问器(public),为set设置私有或受保护的访问器

三、弱引用

  当实例化一个类或结构后,只要有代码引用它,就形成了强引用。如果需要使用弱引用可以通过如下代码来创建

WeakReference mathReference = new WeakReference(new MathTest());

MathTest math;

if(mathReference.IsAlive){
math = mathReference.Target as MathTest; }

四、部分类

  使用partial关键字可以把类、结构、接口放在多个文件中。

五、继承

  1.C#中不支持多重继承,但允许实现多个接口。C# 不支持私有继承,因此基类上没有public或private限定符

  2.在继承中,如果将基类的函数声明为virtual,可以在任何派生类中重写该函数。在函数调用的时候,会调用该类对象的合适的方法。

  3.C#中,函数默认情况下都不是虚函数,除非显式声明为virtual。而在Java中,所有函数都是虚拟的

  4.若需要隐藏基类的某个方法,可使用new关键字

  5.抽象类和抽象方法

    1)使用abstract关键字,可以将一个类或方法声明为抽象类或抽象方法

    2)抽象类不能实例化,抽象函数不能直接实现,必须在费抽象的派生类中重写

  6.密封类和密封方法(断子绝孙类/方法)

    1)使用sealed关键字,可以将一个类或方法声明为密封类/方法

    2)密封类不能被继承,密封方法不能被重写。string就是一个密封类

C# 高级编程04----类的更多相关文章

  1. 第三章:Python高级编程-深入类和对象

    第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...

  2. C++面向对象高级编程(五)类与类之间的关系

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming   OOP面向对象编 ...

  3. Linux高级编程--04.GDB调试程序(查看数据)

    查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用 ...

  4. Linux高级编程--04.GDB调试程序(设置断点)

    调试已运行的程序 在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb PID格式挂接正在运行的程序. 先用gdb 关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程 ...

  5. obj-c编程04:类的继承

    这第4篇内容比較少,主要说的是obj-c中的类的继承,须要说明的是我仅仅是写了继承中最简单的形式,假设所有展开来说,那就多了去了!关键是如今肚子里还没装够墨水,没法展开啊! 以下的代码中,我们写了2个 ...

  6. Python实用笔记 (26)面向对象高级编程——定制类

    Python的class允许定义许多定制方法,可以让我们非常方便地生成特定的类.以下是集中常见的定制方法: 怎么才能打印得好看呢?只需要定义好__str__()方法,返回一个好看的字符串就可以了: _ ...

  7. Linux高级编程--04.GDB调试程序(入门概述)

    GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试 ...

  8. C++之高级编程20170914

    /*************************************************************************************************** ...

  9. python高级编程之元类(第3部分结束)

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #元编程 #new-style类带来了一种能力,通过2个特殊方法(_ ...

  10. C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章  ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...

随机推荐

  1. python——redis

    redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

  2. bzoj 3669: [Noi2014]魔法森林 (LCT)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3669 题面: 3669: [Noi2014]魔法森林 Time Limit: 30 Sec  ...

  3. fast ai-lesson 1 报错解决方法(正则表达式提取文件名)

    在运行fast ai lesson 1的代码的时候,运行到的时候报错了 data = ImageDataBunch.from_name_re(path_img, fnames, pat, ds_tfm ...

  4. 关于bytes和bytearray

    背景 平时工作因为有批量线上数据进行更新,通过Python程序连接数据库,利用连接池和gevent的并发性能,处理大量数据. 因为数据方提供的数据表结构中带有varbinary类型字段,并非全部,所以 ...

  5. Flexbox(弹性盒模型)完全指南

    Flexbox(弹性盒模型)布局完全指南 Github:sueRimn 来源:A guide to Flexbox 这个指南讲诉了flexbox的所有内容,重点介绍了父元素(flex容器)和子元素(f ...

  6. 20175221 MyCP(课下作业,必做)

    MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...

  7. maven的安装教程

    一.准备工作  1.确定电脑上已经成功安装jdk7.0以上版本                 2.win10操作系统                 3.maven安装包            下载 ...

  8. 【Unity游戏开发】UGUI不规则区域点击的实现

    一.简介 马三从上一家公司离职了,最近一直在出去面试,忙得很,所以这一篇博客拖到现在才写出来.马三在上家公司工作的时候,曾处理了一个UGUI不规则区域点击的问题,制作过程中也有一些收获和需要注意坑,因 ...

  9. 使用Docker安装ELK系列(超简单)

    root权限 docker版本:1.13.1 ELK版本:6.4.3 项目中均关闭X-Pack 一.安装Elasticsearch 新建elasticsearch目录,并再其下新建文件config/e ...

  10. php的api接口

    在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么, ...