C#学习记录3上——类的封装,继承,多态

OOP面向对象的三大特点:封装(encapsulation),继承(inheritance),多态(encapsulation)

和JAVA与C++一样,C#也是OOP语言。并且,C#对数据的封装要比C++更好。另外,在C++里面可能习惯从main函数开始程序,类是作为主函数的一部分而存在的。而C#里面,所有的所有都是在某个类中进行。

这里还是说C#较其他语言不一样的地方。

有关类Class

1.方法参数Arguments和传递参数Parameters

首先说一下这两个词的区别。其实都是指参数,大多时候也都是互相通用。具体的,parameters指在声明方法的时候中的参数,而arguments指调用方法时传到方法中的参数。

第一,关于可选(默认)变量:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Program obj = new Program();
 6             int num1 = 100, num2 = 200, num3 = 300;
 7             obj.PrintMethod(num1, num2, num3);
 8             obj.PrintMethod(num1);
 9             obj.PrintMethod(num1, arg3: num3);
10             Console.ReadKey();
11         }
12         void PrintMethod(int arg1, int arg2=20, int arg3=30)
13         {
14             Console.WriteLine(arg1 + " " + arg2 + " " + arg3);
15         }
16     }

PrintMethod方法参数列表里面有三个参数,后两个成为可选变量。也就是说,他们在方法被调用时可以填写也可不填。不填写则使用默认的值。

可选变量在C#3.0里是不允许的,而到了4.0就可以使用了。注意,如果想要在调用的时候跳过某一个可选变量对后面的进行赋值,需要向上面第9行一样,用参数名:具体值得形式赋值。

上面的运行结果

第二,Passing by reference or by value

相信这两个已经烂熟于心了吧。不多解释。C#一样是不加说明则按值,通过在parameter列表里加ref说明是按引用。

除这两个之外,C#多了一种out参数。由于C#需要明确赋值,即变量须在使用之前进行赋值。所以如果将只声明而未赋值的变量按引用ref传到方法中,就会出现错误。这个out就是在这儿使用的,可以将未赋值的变量传入方法。

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Program obj = new Program();
 6             int num1 = 100, num2;
 7             obj.ValueMethod(num1);
 8             Console.WriteLine("After By Value: " + num1);
 9             num1 = 100;
10             obj.ReferenceMethod( ref num1);
11             Console.WriteLine("After By Reference: " + num1);
12             obj.OutMethod(out num2);
13             Console.WriteLine("After By Out: " + num2);
14             Console.ReadKey();
15         }
16         void ValueMethod(int arg1)
17         {
18             arg1 = 50;
19         }
20         void ReferenceMethod(ref int arg1)
21         {
22             arg1 = 50;
23         }
24         void OutMethod(out int arg1)
25         {
26             arg1 = 25;
27         }
28     }

上面说的这些适用于除了引用类型的数据类型。引用类型有五种:class、interface、delegate、object、string

并不是说引用类型就都是按照引用方式传递了,具体的当引用类型作为参数时:
1、在修改变量本身时,结果类似于值传递,即不会改变传递前的变量的值
2、在修改变量的属性或字段时,才是引用传递,会影响到传递前的变量的值
3、参数使用了ref后,才是真正的引用传递,不管修改变量本身还是修改变量的属性或字段,都会影响到传递前的变量的值

2.this指针

为了明确一些名字的混淆问题,我们经常在类里面使用this指针,它指向当前对象(object)。不同的是C++里面this指针后要通过->来获得object里面的内容,而C#内可以直接通过.(dot)使用。(不刻意的区分指针和具体对象了)

3.static

静态的方法或成员变量在C#中必须只能直接通过类来访问,不允许通过具体该类的实例对象来访问。这一点要注意

另外static方法中不可使用this,而静态方法只能访问静态成员变量。

4.销毁对象

C#想JAVA一样是隐式的进行垃圾回收。如果需要显示的释放空间,通过析构方法来进行。

不过C#显示调用析构方法是不合法的。需要通过实现IDisposable接口,具体的添加Dispose方法。

这里可以使用代码

 1 class SomeClass : IDisposable
 2 {
 3     bool is_disposed = false;
 4     protected virtual void Dispose(bool disposing)
 5     {
 6         if(!is_disposed)
 7         {
 8             if (disposing)
 9             {
10                 Console.WriteLine("Not in destructor");
11             }
12             Console.WriteLine("Disposing...");
13         }
14         this.is_disposed = true;
15     }
16     public void Dispose()
17     {
18         Dispose(true);
19         GC.SuppressFinalize(this);
20     }
21     ~SomeClass()
22     {
23         Dispose(false);
24         Console.WriteLine("In destructor");
25     }
26 }

5.通过属性进行数据封装

在设计类的时候,我们总是希望将类的内部状态隐藏在类成员之间,通过方法来间接地访问。当是客户却总是希望直接访问这些属性。解决这个冲突的方法就是通过属性实现。

 1 public int Salary
 2 {
 3     get
 4     {
 5         return salary;
 6     }
 7     set
 8     {
 9         this.salary = value;
10     }
11 }

通过get和set可以通过类似属性的方式来设置或访问具体内容

6.readonly字段

也就是constant

被声明为readonly的值只能在声明时被赋值。如果是静态readonly值则还可以在static从constructor里赋值

时间: 2024-10-20 09:26:07

C#学习记录3上——类的封装,继承,多态的相关文章

C#学习记录3下——类的封装,继承,多态

new,virtual,override三者的区别 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Example 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Shape sh

java类的封装 继承 多态

1.猜数字小游戏 package cn.jiemoxiaodi_02; import java.util.Scanner; /** * 猜数字小游戏 * * @author huli * */ public class GuessNumberDemo { public static void main(String[] args) { int number = (int) (Math.random() * 100) + 1; while (true) { System.out.println("

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

MyBatis 学习记录3 MapperMethod类

主题 之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMethod.execute(sqlSession, args);所以想再简单学习记录下MapperMethod类 组成 从上图可知,MapperMethod只有2个成员域,都是静态内部类,所以 MapperMethod ≈ SqlCommand + MethodSignature SqlCommand

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对