我是OOP的新手,我只是用C#开始冒险。我最近遇到了一个关于StackOverflow的主题,有人问如何在类本身内部创建一个类的实例。
public class My_Class
{
My_Class new_class= new My_Class();
}
我的问题是为什么我们想做这样的事情?我尝试在论坛上进行一些搜索,但大多数讨论似乎都是关于如何创建无限循环等。
一个简单的例子将非常受欢迎(或者可能是关于谷歌的短语的建议)
答案 0 :(得分:1)
好的,一个简单的例子:
class Human
{
Human Father { get; set; }
Human Mother { get; set; }
}
另一个:
class Employee
{
Employee Manager { get; set; }
}
您将类型与该类型的实例混淆。实例可以有不同的含义。
另一个着名的例子是singletons,用于存储一个不会公开的类型的实例,并用于所有静态方法或属性。
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
答案 1 :(得分:0)
您希望在同一个类中包含实例的一个示例是链表结构。每个节点都有一个前一个实例和下一个实例:
public class Node
{
Node next;
Node previous;
//...
}
答案 2 :(得分:0)
最有可能的是,这是描述Singleton
模式,其中您的程序只有一个类的实例。在这种情况下,您倾向于从该类中实例化该类本身的单个实例。
// naive implementation of singleton, but demostrates the basics
public class Singleton
{
private static Singleton instance;
static Singleton()
{
this.instance = new Singleton();
}
public static Singleton Instance{ get { return instance; } }
private Singleton() {}
public void DoSomething() { ... }
}
使用
Singleton.Instance.DoSomething();
答案 3 :(得分:0)
在实施Singleton design pattern的变体时,您通常会执行此操作。但是显然比你在问题中发布的内容涉及更多的代码。
此外;不,这不会创建一个无限循环。如果你无条件地在同一个类的构造函数中构造一个类的新实例,它将创建一个StackOverflowException
。或者作为该字段的默认值。
答案 4 :(得分:0)
许多答案已经回答了"如何"你的问题的一部分,所以我只回答"为什么"就大多数答案所提到的单身设计模式而言:
我的问题是为什么我们想做这样的事情?
有时一个班级只有一个实例很重要。例如,在系统中应该只有一个窗口管理器(或只有一个文件系统或只有一个打印假脱机程序)。通常,单身人士用于集中管理内部或外部资源,并为他们自己提供全球访问点。 - source