C#OOP 之 this 和 base
2015-07-23 11:03
477 查看
在项目当中经常涉及到 C# 面向对象的继承,所以经常有 用到 this 关键字 和base 关键字,我不和别人一样照搬 MSDN的说法,我只想用我自己的下面用代码说明一下我对 this 关键字的理解
首先创建一个基类 BaseClass ,有一个带有参数的构造函数,基类有一个成员方法 GetConnnection,用户获取基类的一个字段,然后创建一个基类的派生类,也有一个带有参数的构造函数,该构造函数调用了基类的带有参数的构造函数,然后创建一个test方法去调用基类的GetConnnection获取基类的成员,然后创建一个User类,在这个类里面实例化一个ConnClass的对象,然后用这个类的实例调用 test 方法,最后输出的就是 open
这里我想说明一下,类的所有的非静态的成员应该都是属于 类的实例 ,然而 用base可以调用 GetConnection这个方法,所以我认为 base关键字就是属于实例,而且不能用base关键字调用基类的静态成员
然后可以这样理解,当实例化一个ConnClass实例的时候,也会去调用 基类的构造函数去实例化一个基类的对象(顺序是先实例化一个基类的对象,然后才会实例化子类的对象),然后在ConnClass的实例的范围内 去调用 base 关键字 ,此时base关键字就是 上面说的 实例化的基类的一个对象,所以就很好理解为什么base.GetConnnection() 返回的状态是 open了。
说了这么多,不知道大家听懂没有,我也是把自己的理解说出来,如果大家有什么疑问或者发现我说的是错的,可以联系我
875175299@qq.com
public class User { public void CreateConn() { IDbConnection iconn = new SqlConnection("Data Source=IT-HOUWENCHENG\\SQLEXPRESS;Initial Catalog=SiiaOA;User ID=sa;Password=hou875175299;"); iconn.Open(); ConnClass conn = new ConnClass(iconn); conn.test(); //输出open 说明这个链接已经被打开 Console.ReadKey(); if (conn != null) { iconn.Close(); } } } public class ConnClass:BaseClass { public ConnClass(IDbConnection conn) :base(conn) //调用基类的带有参数的构造函数 { } public void test() { IDbConnection conn= base.GetConnection(); //base 关键字可以省略 if (conn == null) { Console.WriteLine("连接对象为null"); } else { Console.WriteLine(conn.State.ToString()); } } } public class BaseClass { private IDbConnection _conn; public BaseClass(IDbConnection conn) { this._conn=conn; //this 关键字可以省略 } public IDbConnection GetConnection() { return this._conn; } }
首先创建一个基类 BaseClass ,有一个带有参数的构造函数,基类有一个成员方法 GetConnnection,用户获取基类的一个字段,然后创建一个基类的派生类,也有一个带有参数的构造函数,该构造函数调用了基类的带有参数的构造函数,然后创建一个test方法去调用基类的GetConnnection获取基类的成员,然后创建一个User类,在这个类里面实例化一个ConnClass的对象,然后用这个类的实例调用 test 方法,最后输出的就是 open
这里我想说明一下,类的所有的非静态的成员应该都是属于 类的实例 ,然而 用base可以调用 GetConnection这个方法,所以我认为 base关键字就是属于实例,而且不能用base关键字调用基类的静态成员
然后可以这样理解,当实例化一个ConnClass实例的时候,也会去调用 基类的构造函数去实例化一个基类的对象(顺序是先实例化一个基类的对象,然后才会实例化子类的对象),然后在ConnClass的实例的范围内 去调用 base 关键字 ,此时base关键字就是 上面说的 实例化的基类的一个对象,所以就很好理解为什么base.GetConnnection() 返回的状态是 open了。
说了这么多,不知道大家听懂没有,我也是把自己的理解说出来,如果大家有什么疑问或者发现我说的是错的,可以联系我
875175299@qq.com
相关文章推荐
- C# 6.0 编译器
- C#/.net给textbox添加回车事件
- C#读取XML文件,以及对XML文件的增删改查
- 可视化对比十多种排序算法(C#版)
- 如何使用C#操作幻灯片
- C#中将DataTable中数据导出到csv文件中
- C# 委托(delegate)使用之一二三步
- 在Visual studi C#的“///”注释内容生成XML文档
- C#异常处理
- C#汉字转十六进制
- c# 读取文件流
- C#高级编程四十九天----队列
- C# Winform界面中的分隔线问题
- C#高级编程四十八天----列表
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 服务器故障诊断排查工具
- c#函数返回多个变量
- 容器使用笔记(Dictionary篇)
- c# DataTable 表中的某个值如何获取
- 【转】[C#List的Sort()、Find()、FindAll()、Exist()的使用方法举例
- C# combox不能输入的解决方法