想起个寓言 从前有个妈,她有个傻儿子,一天妈要出门,给傻儿子烙一张大饼,套在他的脖子上,几天以后,妈回来,发现傻儿子饿死了,只有脖子前的饼被吃了,脖子后面的,全留下了我不是说楼主是傻儿子,我是说编.net的人不是傻儿子 按楼主的说法,下面的代码岂非要出错 public class a{ void test() { b sb=new b(); } public a(){ b sb = new b(); } } public class b:a{}
其实,valuetype类型(比如bool、int、byte等等)并不是真正“继承自”object,它们之所以看上去是继承的,是clr的一种伪装,这种伪装叫做“装箱/拆箱”。另外,你的问题没有什么大惊小怪的。声明和定义是两回事,请看如下定义:class BinaryTree { public Node root; } class Node { public Node left; // Node中包含Node public Node right; }
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 { class Program { static void Main(string[] args) { a tt = new a(); b ss = new b(); Console.ReadKey(); } } class a { void test() { b sb = new b(); } public a() { b sb = new b(); Console.WriteLine("这是父类"); } } class b : a { public b() { Console.WriteLine("这是子类"); } } }
给你写个demo:using System;namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var x = new B(); x.Y = new A(); Console.WriteLine(x.Y.X); Console.ReadKey(); } } class A { public string X="hello"; public B Y; } class B { public int X=1234; public A Y; } }
你还可以写using System;namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var x = new B(); x.Y = new A(); x.Z = new B { X = 4567 }; Console.WriteLine(x.Z.X); Console.ReadKey(); } } class A { public string X = "hello"; public B Y; } class B { public int X = 1234; public A Y; public B Z; } }哪有什么“定义先后”这种规定?
从前有个妈,她有个傻儿子,一天妈要出门,给傻儿子烙一张大饼,套在他的脖子上,几天以后,妈回来,发现傻儿子饿死了,只有脖子前的饼被吃了,脖子后面的,全留下了我不是说楼主是傻儿子,我是说编.net的人不是傻儿子
按楼主的说法,下面的代码岂非要出错
public class a{
void test()
{
b sb=new b();
}
public a(){
b sb = new b();
}
}
public class b:a{}
{
public Node root;
}
class Node
{
public Node left; // Node中包含Node
public Node right;
}
1楼和三楼说的我也看到过,但是不知道。net是怎样解决这问题的
2楼很厉害啊
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
a tt = new a();
b ss = new b();
Console.ReadKey();
}
}
class a
{
void test()
{
b sb = new b();
}
public a()
{
b sb = new b();
Console.WriteLine("这是父类");
} }
class b : a
{
public b()
{
Console.WriteLine("这是子类");
}
}
}
在创建b这个对象的时候,会先去调用a的构造函数,在返回来调用b的构造函数,所以会无限循环下去了
会抛出栈溢出异常
哪有什么先后?谁跟你说从object集成的类型没有定义?
{
class Program
{
static void Main(string[] args)
{
var x = new B();
x.Y = new A();
Console.WriteLine(x.Y.X);
Console.ReadKey();
}
} class A
{
public string X="hello";
public B Y;
} class B
{
public int X=1234;
public A Y;
}
}
{
class Program
{
static void Main(string[] args)
{
var x = new B();
x.Y = new A();
x.Z = new B { X = 4567 };
Console.WriteLine(x.Z.X);
Console.ReadKey();
}
} class A
{
public string X = "hello";
public B Y;
} class B
{
public int X = 1234;
public A Y;
public B Z;
}
}哪有什么“定义先后”这种规定?
如果楼主知道代码是放在哪的,就不可能不知道那么在object未被定义前bool类型该也是没有定义的吧 这个问题,因为object类不是对象,bool类型也不是对象,不可能存在“找不到”这个问题。
a.method();
B b=null;
b.method();
他把类理解成这样了。所以才会有这样的问题。
他应该是这么理解的
A a=new A()
a=b;
B b=null;