基类是否为每个新实例实例化?

时间:2015-08-03 07:38:35

标签: c# .net c#-4.0 clr

我一直在考虑CLR如何创建新实例。请考虑以下代码:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/opengl/GLProfile
at org.jzy3d.chart.Settings.<init>(Settings.java:19)
at org.jzy3d.chart.Settings.getInstance(Settings.java:48)
at org.jzy3d.analysis.AnalysisLauncher.open(AnalysisLauncher.java:18)
at org.jzy3d.analysis.AnalysisLauncher.open(AnalysisLauncher.java:13)
at org.jzy3d.demos.scatter.ScatterDemo.main(ScatterDemo.java:16)
Caused by: java.lang.ClassNotFoundException: javax.media.opengl.GLProfile
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
Java Result: 1

这是我的问题:

  1. 每次为这行代码public class Base { public Base() { } } public class Derived : Base { public Derived() : base() { } } 创建System.Object实例?内存中有多少个实例?是2还是1?

  2. 对于以下代码行:var baseObj = new Base();。将创建多少个实例?是3还是2?

1 个答案:

答案 0 :(得分:3)

在两个样本中,只有一个对象。只分配了一块内存,并且基类&#39;合并&#39;与父母一起只有一个类包含从基类派生的所有方法,字段和属性,包括base-class-of-all。 object

如果var derivedObj = new Derived();创建两个实例,您认为会发生什么?如何引用未分配给baseObj的那个?保持两个类的实例是活着的没有用处。只有一个人会这样做。