获取接口类型变量值的具体 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 以字符串形式获取正确的日志信息,并且调用该方法的任何人都可以将所有信息聚合在一起。
好吧,我不知道该怎么说,所以我先道歉。
我有...
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 和其他一些属性(如果每个属性都可用)。但要做到这一点,我需要对象的基本类型...因为我在泛型中工作,所以我宁愿不必复制和粘贴我的很多功能,只是为了在特定情况下转换值。
所以我的大问题是。 有什么方法可以在界面
中获取模板化的基础classEG.
//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 以字符串形式获取正确的日志信息,并且调用该方法的任何人都可以将所有信息聚合在一起。