Мне кажется странным, что вы хотите вернуть ссылку на текущий экземпляр класса из текущего экземпляра. Разве у вас еще нет такой ссылки, чтобы получить доступ к свойствам и методам объекта? Можете ли вы подумать о клонировании?
Если я не пропустил что-то в вашей модели, кажется, что правильно настроенная схема инициализации, некоторые скучные определения свойств и, возможно, класс фабрики могут быть больше похожи на то, что вы ищете. Также кажется, что вы МОЖЕТЕ подумать о том, чтобы установить своего Родителя с ID как неизменяемое свойство, хотя ваши требования могут создать истинную причину для этого.
Вот некоторые потенциально полезные определения класса. Здесь, в Сент-Луисе, рано, и я еще не нахожусь в должном порядке, так что я могу что-то упустить. , , ; -)
Родитель:
public class Parent
{
protected string _id;
// Protected default constructor so tht this class can be inherited:
protected Parent() { }
// REquired to set ID at initialization;
public Parent(String ID)
{
_id = ID;
}
// Read-only:
public String ID
{
get { return _id; }
}
// This seems a little dodgy. Why would you want to return a reference
// to the current instance as a result of resetting the ID?
public Parent SetID(String ID)
{
_id = ID;
return this;
}
}
Фабрика родителей:
public class ParentFactory
{
public static Parent NewParent(String ID)
{
Parent newParent = new Parent(ID);
return newParent;
}
}
Ребенок:
public class Child : Parent
{
private string _name;
// Protected default constructor so tht this class can be inherited:
protected Child() { }
// Initialize a new Child with the ID property required for the parent:
public Child(String ID)
{
base.SetID(ID);
}
// Initialize a new child with both properties set:
public Child(String ID, String Name) : this(ID)
{
_name = Name;
}
// This could be read-only as well:
public String Name
{
get { return _name; }
set { _name = value; }
}
// Again, seems kinda dodgy:
public Child SetName(String name)
{
return this;
}
}
Детская фабрика:
public class ChildFactory
{
public static Child NewChild(String ID)
{
Child newChild = new Child(ID);
return newChild;
}
public static Child NewChild(String ID, String Name)
{
Child newChild = new Child(ID, Name);
return newChild;
}
}