您的位置:首页 > 编程语言 > C#

C#OOP 之 this 和 base

2015-07-23 11:03 477 查看
在项目当中经常涉及到 C# 面向对象的继承,所以经常有 用到 this 关键字 和base 关键字,我不和别人一样照搬 MSDN的说法,我只想用我自己的下面用代码说明一下我对 this 关键字的理解

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: