实施例。怎么得到名字"父母"在嵌套类中。 嵌套类可以在任何类中初始化并获取其名称。
public class Parent
{
public ParentNested n = new ParentNested();
}
public class Nested
{
public Nested()
{
// return "Parent" ???
string ParentName = GetParentClassName();
}
}
public class ParentNested : Nested { }
答案 0 :(得分:1)
忽略与设计相关的问题,您可以使用反射获取信息;
public Nested()
{
Type type;
for (int i = 1;; i++)
{
// Get the method in the i'th stack frame
var method = new StackFrame(i).GetMethod();
if (method == null) return;
// Get the class declaring the method
type = method.DeclaringType;
if (type == null) return;
// If the class isn't a parent class, use it.
if (!type.IsSubclassOf(typeof(Nested)))
break;
}
_parent = type.FullName; // Will be set to "Parent"
}
这个简单版本将查找调用堆栈中的第一个非基类,并将其保存到_parent。
答案 1 :(得分:0)
所以你想要Nested
类的实例找出谁“拥有”它们?
由于问题标有“反射”,我只想说你不能用反射做这件事。
但是如果Nested
的实例逻辑上需要知道拥有它们的对象,那么你需要告诉它们。您可以将所有者的实例(Parent
)传递给Nested
的实例,如下所示:
public class Parent
{
public ParentNested n;
public Parent()
{
n = new ParentNested(this);
}
}
public class Nested
{
public Nested(object owner)
{
// return "Parent" ???
string ParentName = owner.GetType().Name;
}
}
public class ParentNested : Nested
{
public ParentNested(object owner) : base(owner) {}
}
答案 2 :(得分:0)
现在就像这样使用。但是在许多地方需要使用带参数的构造函数"这个"。使用任何类的参数是有限的接口。但嵌套类继承占了另一个设计师和写。
public interface IParent { }
public class Parent : IParent
{
public ParentNested n;
public Parent()
{
n = new ParentNested(this);
}
}
public class Nested
{
private IParent _parent;
public Nested(IParent parent)
{
// return "Parent"
_parent = parent;
}
}
public class ParentNested : Nested
{
public ParentNested(IParent parent) : base(parent) { }
}