2017-06-10 52 views
-1

当一个类的实例中的某个字段属于另一个类时,另一个类的实例是否可以知道它所属的类的名称?对象是否可以知道它是一个字段的类的名称?

例如,

public class ClassA 
{ 
    public void MethodA() 
    { 
     ... // can an ClassA instance know the name of the class of which it is a field? 
    } 
} 

public class ClassB 
{ 
    Public ClassA objA; 
    public void MethodB() 
    { 
     objA.MethodA(); 
    } 
} 

public class ClassC 
{ 
    Public ClassA objA; 
    public void MethodC() 
    { 
     objA.MethodA(); 
    } 
} 

public static void Main(string[] args) 
{ 
    ClassB objB = new ClassB(); 
    objB.MethodB(); 

    ClassB objC = new ClassC(); 
    objC.MethodC(); 
} 

当任objB.MethodB()objC.MethodC()呼叫objA.MethodA(),内部objA.MethodA(),它可以知道类的objA是一个字段的名称,而无需通过类作为名一个参数为objA.MethodA()?谢谢。

+0

我想应该通过堆栈跟踪是可能的。但那只是要求做大量不必要的工作。恕我直言 – Nkosi

+0

谢谢。你能详细说明吗? – Tim

+0

@Tim为什么不向MethodA添加一个'object caller'参数? StackTrace超级慢 –

回答

1

如何使用适当的参数和小界面! C类和B类都可以实现接口ICallers。实际上,这个界面是一个标记。现在

class C:ICaller 
{ 
    ... 
} 
class B :ICaller 
{ 
    ... 
} 

A类里面的方法可以利用参数至极可以帮助我们确定哪些类已调用的方法

public void MethodA(ICaller caller) 
{ 
    var class = caller as B; 
    if(class!=null) 
    ... 
} 

public class ClassC 
{ 
    Public ClassA objA; 
    public void MethodC() 
    { 
     objA.MethodA(this); 
    } 
} 
相关问题