class 内部的 class 实例
Instance of class inside of the class itself
此代码有效:
class Person{
public Person p;
public string name;
private int age;
}
class Solution {
static void Main(String[] args) {
Person z = new Person () { name = "Stacl"};
Console.WriteLine (z.name);
Person a = new Person ();
Console.WriteLine (a.name);
}
}
但这行不通:
class Person{
public Person p = new Person (){name = "Inside",age = 45}; // add 'new'
public string name;
private int age;
}
class Solution {
static void Main(String[] args) {
Person z = new Person () { name = "Stacl"};
Console.WriteLine (z.name);
Person a = new Person ();
Console.WriteLine (a.name);
}
}
你能解释一下这是怎么发生的以及为什么会发生吗?
正如@Lucas 在评论中提到的那样,这会导致创建 Person
.
的无限循环
你不能构造一个Person
而不初始化p
字段,它构造一个Person
,它构造一个Person
,等等...
当然,这最终会导致 WhosebugException
。
您实际想要实现的是:
class Person{
public string name = "Inside";
private int age = 45;
}
在 Person 实例中创建 Person 实例将导致 WhosebugException。
但是由于您是从外部访问 'name'-字段而不是 'p'-字段,因此无论如何都没有必要。
顺便说一下,您应该用属性替换 public 字段,因为这是推荐的样式。
class Person{
public Person() {
Name = "Inside";
}
public string Name {get; set;}
private int age = 45;
}
此代码有效:
class Person{
public Person p;
public string name;
private int age;
}
class Solution {
static void Main(String[] args) {
Person z = new Person () { name = "Stacl"};
Console.WriteLine (z.name);
Person a = new Person ();
Console.WriteLine (a.name);
}
}
但这行不通:
class Person{
public Person p = new Person (){name = "Inside",age = 45}; // add 'new'
public string name;
private int age;
}
class Solution {
static void Main(String[] args) {
Person z = new Person () { name = "Stacl"};
Console.WriteLine (z.name);
Person a = new Person ();
Console.WriteLine (a.name);
}
}
你能解释一下这是怎么发生的以及为什么会发生吗?
正如@Lucas 在评论中提到的那样,这会导致创建 Person
.
你不能构造一个Person
而不初始化p
字段,它构造一个Person
,它构造一个Person
,等等...
当然,这最终会导致 WhosebugException
。
您实际想要实现的是:
class Person{
public string name = "Inside";
private int age = 45;
}
在 Person 实例中创建 Person 实例将导致 WhosebugException。 但是由于您是从外部访问 'name'-字段而不是 'p'-字段,因此无论如何都没有必要。
顺便说一下,您应该用属性替换 public 字段,因为这是推荐的样式。
class Person{
public Person() {
Name = "Inside";
}
public string Name {get; set;}
private int age = 45;
}