假设我有三个课程A
,B
和C
,如下所示,A
和B
有属性Pro1
和{{ 1}}类型Pro2
:
C
在类class A
{
public C Pro1 {get; set; }
}
class B
{
public C Pro2 { get; set; }
}
public class C
{
public void Do()
{
//How to get Type of object to reference to current object C
//Example: Either type A or B
}
}
的方法Do
中,我想获取引用当前对象C的当前父对象(通过C
和Pro1
)。在这个样本中,无论是A还是B,但总的来说,它可能非常动态:
Pro2
我可以通过哪种方法实现这一目标?
答案 0 :(得分:2)
您可以将“父”对象作为参数传递给C构造函数:
public class C
{
private readonly object _parent;
public C(object parent)
{
_parent;
}
public void Do()
{
Type type = _parent != null ? _parent.GetType() : null;
// Do something with type...
}
}
答案 1 :(得分:1)
var a = new A() { Pro1 = new C() };
a.Pro1.Do(); //will get Type A in Do
var b = new B() { Pro2 = new C() };
b.Pro2.Do(); //with get Type B in Do
通过这个,您已经知道正在进行呼叫的对象(a或b);你在做什么可能没有意义。如果是这样,您始终可以使用简单继承解决此问题
C a=new A();
C b=new B();
并且可以插入呼叫者A或B的身份。
答案 2 :(得分:1)
Thomas Levesque提供了一种向C
添加更多信息的方法来实现这一目标。如果是类型而不是您要存储在C
中的特定实例,则可以使C
成为通用的,如:
class A
{
public C<A> Pro1 { get; set; }
}
class B
{
public C<B> Pro2 { get; set; }
}
public class C<T> where T : class // maybe you want to add other "where" constraints on T
{
public void Do()
{
// you can use T in here
}
}