snowka 发表于 2008-6-27 15:41

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();
}

tomtory 发表于 2008-6-27 15:50

public class A
{
  protected SqlConnection objSqlConnection;
  public A
  {
    this.objSqlConnection = new SqlConnection("server=.;database=database_name;uid=sa;pwd=;");
  }
  // do something ...
}


这是构造函数耶  老大  当然要用base来调用的哦

达文西 发表于 2008-6-27 15:55

C那个是实例化的  为什么不能用啊 高人解释一下

达文西 发表于 2008-6-27 15:56

这怎么可能是构造函数啊? 晕死

kevintang 发表于 2008-6-27 16:00

[tk02]

visolleon 发表于 2008-6-27 16:28

跟base没关系!
你看看你的这句:
protected SqlConnection objSqlConnection
objSqlConnection是protected类型

而C类:
public class C
{
  A a = new A();
// a.objSqlConnection.open();不可用
  a.objSqlConnection.open();
}

C类又不是派生类,请问如果访问A类的protected成员?

seiya027848 发表于 2008-6-27 16:50

这主要是跟objSqlConnection这个成员在类中的修饰符有关。
protected->从字面上看,表示该成员是被保护的。就是说他只能被该类(注意:不是对象)中的其他成员以及它的子类中的成员访问访问。
你在类C中创建了类A的实例(对象),因而不能被使用。
参考:http://msdn.microsoft.com/zh-cn/library/bcd5672a.aspx

达文西 发表于 2008-6-27 17:00

靠了  我怎么没有看出来啊  C类不是派生类

yuehuolong 发表于 2008-6-27 17:11

protected的意思就是只能自己和他的自类调用,打个比方,A有一种秘方,只传后代不传外人.B是A的儿子,他肯定能知道这个秘方,C是外人,和A,B没关系,所以C无法看到这个秘方.

yuehuolong 发表于 2008-6-27 17:14

顺便说一下,构造函数需要加括号的,没加括号语法都是错的

snowka 发表于 2008-7-1 14:26

非常感谢大家

我觉得,不能用的原因是 objSqlConnection 实例化的地方造成的
如果 在类的一个普通方法中实例化,那么这个 objSqlConnection 属于这个类的对象,如果在构造方法中实例化
objSqlConnection 那么它属于整个类

不知这样想对不对

tomtory 发表于 2008-7-1 15:52

嘿嘿
确实非构造函数 呵呵
我把()忘了 呵呵

页: [1]

编程论坛