获取接口类型变量值的具体 class

Get the concrete class for the value of an interface-typed variable

好吧,我不知道该怎么说,所以我先道歉。

我有...

public interface Ifoo
{
     string commonFunc();
}

public class fiz : Ifoo
{
     public string commonFunc() { /*...*/ }
}

public class buzz : Ifoo
{
     public string commonFunc() { /*...*/ }
}

每个 fizz 和 buzz 还具有许多特定于它的其他属性 class,在极少数情况下,我需要访问那些 functions/members...

Ifoo temp = new buzz();
(buzz)tmp.privatemember;

我遇到的一个这样的案例是错误日志记录,如果出现问题,我想获取 ID 和其他一些属性(如果每个属性都可用)。但要做到这一点,我需要对象的基本类型...因为我在泛型中工作,所以我宁愿不必复制和粘贴我的很多功能,只是为了在特定情况下转换值。

所以我的大问题是。 有什么方法可以在界面

中获取模板化的基础class

EG.

//interface contains T getClass();
//fizz and buzz respectivly have a 
public fizz getClass(){
    return  (fizz)this;
}

还是我的逻辑完全错了...

如果我对你的理解正确,你只想知道给定的 IFoo 是嘶嘶声还是嗡嗡声?

为此,您可以简单地进行如下检查:

IFoo x = ..

if(x is fizz) {
    fizz fizzX = (fizz)x;

    // do fizz stuff

} else if (x is buzz) {
    buzz buzzX = (buzz)x;

    // do buzz stuff

}

不,你不能那样做。无论如何,要获得派生的特定于类型的属性,您必须向下转换。

即使使用泛型也不能解决这个问题,因为泛型在编译时是强类型的,所以在使用时必须声明类型。

一个更简单的解决方案是将这样的函数添加到IFoo:

string GetLogDetails()

然后在每个派生中重写它class。这样,每个 class 都可以 return 以字符串形式获取正确的日志信息,并且调用该方法的任何人都可以将所有信息聚合在一起。