Во-первых, ответ Да объект может иметь поле, содержащее его экземпляр. У него даже могут быть методы, которые принимают или возвращают экземпляры одного и того же класса, и он может даже зависеть от себя в определении класса, например:
public class Person : IComparable<Person> //legal, recursive definition
{
//fields (or properties) that are of type Person
public Person Father;
public Person Mother;
public List<Person> Children;
// method that takes a Person as a parameter
public bool IsParent(Person potentialParent)
{
....
}
//method that returs a Person
public Person Clone()
{
//TODO: real implementation coming soon
}
public Person(){}
//constructor that takes persons as arguments
public Person(Person father, Person Mother)
{
Father = father;
Mother = mother;
}
}
По умолчанию все ссылочные значения равны null
, поэтому у вас не будет проблем с конструктором, если вы не создадите его самостоятельно. Итак, Да , могут быть некоторые проблемы с циклическими ссылками и бесконечными циклами (у каждого родителя есть дети, у которых есть дети, у которых есть родители и т. Д.), Но обычно их можно легко обнаружить и избежать.
Единственный раз, когда я сталкивался с подобными проблемами, это когда я использовал сериализацию XML (или другую текстовую) для объектов с круговой ссылкой.