好的,我不知道怎么说这个,所以我在前面道歉。
我有......
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;
}
或者我的逻辑完全错了......
答案 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
}