类怎样实例化,这个过程不太明白

VichyV 2006-07-22 04:27:55
在对一个类进行实例化过程中,实例化的整个过程是什么样的
只是初始化构造函数吗,还是把这个类的所具有属性、字段和
方法全部都初始化一次呀
...全文
4037 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
iheshi 2006-07-23
  • 打赏
  • 举报
回复
TO netmicro(麦) :
嘿嘿。。。。不好意思,拼写错误。。。我是觉得写的时候不太对劲来着。。。
shiye777 2006-07-23
  • 打赏
  • 举报
回复
学习了
netmicro 2006-07-22
  • 打赏
  • 举报
回复
2.初始化派生类的静态字段。
3.初始化派生类的非静态字段。
4.初始化基类的静态字段。
5.初始化基类的非静态字段。
--------------------------

嗯,经过验证,同意

外加注释:
静态字段和静态构造函数,是初次使用该类的时候初始化和运行的
所以,如果以前已经使用过某类,就不会再初始化该类的静态字段

一个更突显过程的例子:

class Program
{
static void Main(string[] args)
{
C c = new C();
Console.ReadLine();
}
}

class Tester // 该Tester可帮我们跟踪实例化的过程
{
public Tester(string msg) { Console.WriteLine(msg); }
}

class A
{
static Tester AStatic = new Tester("A static");
Tester AInstance = new Tester("A instance");
public A() { AInstance = new Tester("A constructor"); }
}

class B : A
{
static Tester BStatic = new Tester("B static");
Tester BInstance = new Tester("B instance");
public B() { BInstance = new Tester("B constructor"); }
}

class C : B
{
static Tester CStatic = new Tester("C static");
Tester CInstance = new Tester("C instance");
public C() { CInstance = new Tester("C constructor"); }
}

结果:

C static
C instance
B static
B instance
A static
A instance
A constructor
B constructor
C constructor
netmicro 2006-07-22
  • 打赏
  • 举报
回复
栈(Steak) <------ 哈哈哈,饿了吧

栈(Stack),牛排(Steak)
iheshi 2006-07-22
  • 打赏
  • 举报
回复
楼主。
这个问题。你看看书。了解OOP的思想,再了解一下内存堆(Heap)和栈(Steak)的区别就知道了。

Car BWM;
就声明了一个属于类Car的对象BMW。但这个对象的Reference还是null的。即,这个BMW对象只是存在于Steak中,并没有将其指针指向Heap中的真正内容上。
BMW = new Car();
这时,就真正在Heap中实例化了一个对象,这个时候也将Heap上的地址写入了BMW在Steak中的内存地址。BMW有了Reference,且指向了其在Heap中的对象。

实例化Heap中的对象时,简单的成员变量(貌似还有属性等)一样是继续在Steak上随实例单独分配内存地址。而类中的方法则是由对象们共享的。

说的不太清楚。见谅。
lssvn 2006-07-22
  • 打赏
  • 举报
回复
学习中……
winxieddd 2006-07-22
  • 打赏
  • 举报
回复
1.属性、方法不需要初始化,因为这些全部是指针。
2.初始化派生类的静态字段。
3.初始化派生类的非静态字段。
4.初始化基类的静态字段。
5.初始化基类的非静态字段。
6.调用基类的构造函数。
7.调用派生类的构造函数。
例子如下:
public class a
{
public a()
{
B = 3;
}
public static int staticA = 0;
public int B = 1;
}

public class b : a
{
public b()
{
C = 5;
}
public static int staticB = 2;
public int C = 3;
}
lping1986 2006-07-22
  • 打赏
  • 举报
回复
学习
ffyuxin 2006-07-22
  • 打赏
  • 举报
回复
实例化时调用其构造函数,比如class A,实例化时就先定义
A a=new A();
调用其构造函数,然后就可调用类中的变量和方法,不需要将所有的属性、字段和方法全部都初始化。
netmicro 2006-07-22
  • 打赏
  • 举报
回复
实例化的过程非常复杂

首先,根据所调用的构造函数逐级往上查找从Object开始直到该派生类的所有层中都需要调用什么构造函数

(注:因为某个构造函数可能会通过“: base(...)”的方法指定需要调用的父类构造函数,所以是逐级往上查找的;如果某个构造函数没有这个字眼,就表示需要调用父类的不带参数的构造函数)

然后从Object开始逐级往下实例化,包括初始化实例字段的值和调用构造函数

其中初始化实例字段的值比调用构造函数先,即例如

class A{
private int b;
private int c = 2;
public A() {
b = 3;
c = 4;
}
}

这个类在实例化的时候,首先b被设为默认值0,c被设为2,然后才调用A(),将b改成3,将c改成4
zhangqiushui 2006-07-22
  • 打赏
  • 举报
回复
类是指:描述一种事物的定义,是个抽象的概念
实例指:该种事物的一个具体的个体,是具体的东西

打个比方:
“人”是一个类。“张三”是人类的一个具体例子

在编程时也是同样的道理,你先自己定义一个“类”,当你需要用时,用“类”的定义来创造一个具体的例子。

用类的定义来创建一个实例,就叫做类的实例化。
实例化过程就是调用类的构造函数,完成该实例的数据分配
VichyV 2006-07-22
  • 打赏
  • 举报
回复
太简单的问题没人回啊~~

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧