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

时间:2015-01-27 18:24:07

标签: c# templates interface

好的,我不知道怎么说这个,所以我在前面道歉。

我有......

public interface Ifoo
{
     string commonFunc();
}

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

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

每个fizz和buzz也有许多特定于该类的其他属性,在极少数情况下我需要访问这些函数/成员......

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

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

所以我的大问题是。 有没有办法在界面中模板化基类

EG。

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

或者我的逻辑完全错了......

2 个答案:

答案 0 :(得分:1)

不,你不能这样做。无论如何,为了获得派生类型特定的属性,你来向下转换。

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

很多更简单的解决方案是将这样的函数添加到IFoo

string GetLogDetails()

然后在每个派生类中覆盖它。有了它,每个类都可以以字符串形式返回正确的日志信息,而调用该方法的任何内容都可以将所有信息聚合在一起。

答案 1 :(得分:0)

如果我正确理解你,你想知道一个给定的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

}