类成员的修饰符

类成员有三类修饰符:Private,Protected和Public。

Private成员只能在类中被引用,

Protected成员只能在类和派生类中被引用,

Public成员可以在任何地方被引用,

这是什么意思呢?派生类只会继承其public和protected成员而不会继承其private成员。如下面的一段程序:

using System;
using System.Collections.Generic;
using System.Text;

namespace InheriteLearning
{
class Program
{
static void Main(string[] args)
{
A a
= new A();
B b
= new B();
b.t
= 6;
int hh = b.t;
Console.Read();

}
}
class A
{
public int i = 1;
protected int j = 2;
private int k = 3;
public void did()
{
j
= k;
}
}

class B : A
{

new public int i = 2;//隐藏基类成员,需要用new关键字
public int u = 4;
public int k = 5;//由于派生类不继承private成员,因此这里不需要用new关键字
private int q = 6;
public int t
{
get
{
return 4;
}
set
{
q
= value;
}
}
//public B firstchild = new B();这段代码是很危险的,他会让你陷入无限的循环中:不停的去实例一个对象,嵌套的。
public void get()
{
B el
= new B();
el.k
= 5;//可以在派生类中引用protected成员

}
}
}

 

类实例化一个对象,只是对其中的数据成员进行初始化,如果有自己的构造函数将先进行字段的初始化然后调用构造函数。对于派生类,它首先会实例自身的成员,然后去实例继承的成员。

内存印象中每个对象仅仅保存属于自己的数据成员的副本。

以下摘在:http://blog.chinaunix.net/u1/41167/showart_1084013.html

而成员函数对于整个类而言却是共享的,即一个类只保留一份成员函数。

那么每个对象怎样和这些可以认为是“分离”的成员函数发生联系,即成员函数如何操作对象的数据成员?

记住this指针,无论对象通过(.)操作或者 (->)操作调用成员函数,编译时刻,编译器都会将这种调用转换成我们常见的全局函数的形式,

并且多出一个参数(一般这个参数放在第一个),然后将 this指针传入这个参数。于是就完成了对象与成员函数的绑定(或联系).

实例化后就得到同一个类的多个不同的对象,既然成员函数共享的,那么成员函数就可以操作对象的数据成员。

 

posted @ 2008-09-24 23:12  GrPro.Liu  阅读(445)  评论(0编辑  收藏  举报