类成员的修饰符
类成员有三类修饰符: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成员
}
}
}
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指针传入这个参数。于是就完成了对象与成员函数的绑定(或联系).
实例化后就得到同一个类的多个不同的对象,既然成员函数共享的,那么成员函数就可以操作对象的数据成员。