C#类的一个问题
如果有两个类 A,B:public class A
{
protected SqlConnection objSqlConnection;
public A
{
this.objSqlConnection = new SqlConnection("server=.;database=database_name;uid=sa;pwd=;");
}
// do something ...
}
public class B : A
{
//在这种情况下 base.objSqlConnection.open();可以用
base.objSqlConnection.open();
}
//但是下面的情况不能用,为什么?
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如果有两个类 A,B,C:
public class A
{
protected SqlConnection objSqlConnection;
// do something ...
}
public class C
{
A a = new A();
// a.objSqlConnection.open();不可用
a.objSqlConnection.open();
}
public class B : A
{
//在这种情况下 base.objSqlConnection.open();可以用
base.objSqlConnection.open();
}
{
protected SqlConnection objSqlConnection;
public A
{
this.objSqlConnection = new SqlConnection("server=.;database=database_name;uid=sa;pwd=;");
}
// do something ...
}
这是构造函数耶 老大 当然要用base来调用的哦 C那个是实例化的 为什么不能用啊 高人解释一下 这怎么可能是构造函数啊? 晕死 [tk02] 跟base没关系!
你看看你的这句:
protected SqlConnection objSqlConnection
objSqlConnection是protected类型
而C类:
public class C
{
A a = new A();
// a.objSqlConnection.open();不可用
a.objSqlConnection.open();
}
C类又不是派生类,请问如果访问A类的protected成员? 这主要是跟objSqlConnection这个成员在类中的修饰符有关。
protected->从字面上看,表示该成员是被保护的。就是说他只能被该类(注意:不是对象)中的其他成员以及它的子类中的成员访问访问。
你在类C中创建了类A的实例(对象),因而不能被使用。
参考:http://msdn.microsoft.com/zh-cn/library/bcd5672a.aspx 靠了 我怎么没有看出来啊 C类不是派生类 protected的意思就是只能自己和他的自类调用,打个比方,A有一种秘方,只传后代不传外人.B是A的儿子,他肯定能知道这个秘方,C是外人,和A,B没关系,所以C无法看到这个秘方. 顺便说一下,构造函数需要加括号的,没加括号语法都是错的
非常感谢大家
我觉得,不能用的原因是 objSqlConnection 实例化的地方造成的如果 在类的一个普通方法中实例化,那么这个 objSqlConnection 属于这个类的对象,如果在构造方法中实例化
objSqlConnection 那么它属于整个类
不知这样想对不对 嘿嘿
确实非构造函数 呵呵
我把()忘了 呵呵
页:
[1]
