我有一个泛型的小问题。
我想我已经知道答案,如果是这样的话,我选了摄影课。但我希望你们中的一些可以证明我错了{S0的}
我有一些通用接口和一些通用类实现。
问题是我需要的属性,属性不能处理泛型!
所以我不知道它的方式; TGT;是我的接口和类。相反,我有我的Interfacelt TGT从非泛型接口派生...不幸的是,非这种通用滑行通过我的类结构像一个非一般的蛇!
我已经取得了良好的工作类,用我的泛型接口和无属性,他们也可用。因此下降泛型产品总数是没有其他选择。
有一种方式,但转换BaseInterface;以1 DerivedInterfacelt的TGT;?这是当你还可以在运行时只知道T呢?
类似DerivedInterfacelt; myVar.GetType()GT
在傍晚,我的问题可能有点神秘,因此,如果我不够清晰,不要犹豫,问{S0的}
谢谢!
后年编辑编辑:
真的非常接近我的代码再重新再重新考虑后,我得出的结论,我的设计是捣毁(是的,即使我犯错误{S2的})!我不需要投IDerivedlt; intgt;到IDerivedlt; Objectgt;不过,我仍想知道如果它是可能的。
编辑:
到SAKryukov一个非常详细的答案!它真正的帮助! {S0的}
后有一个良好的夜间睡眠和阅读的SAKryukovs回答,我现在可以把我的问题,更好的话,虽然比去年晚。所以,这里又来了。
在下面的代码片断,最接近我自己的情况下,我必须转换一个Somethinglt; intgt;到Somethinglt; Objectgt;我看到它的方式是,int是一个对象,所以这种转换应该没有问题。错了!
作为SAKryukov把它(和他应该纠正我,如果我错了),这是因为Somethinglt; intgt;是类型Somethinglt; intgt的;(而不是东西,然后一个int或一个通用的东西)。 int对象Somethinglt的继承; intgt;即使不继承从Somethinglt; Objectgt的。
正如你所看到的不要紧类型T的例子。因为不管哪种类型T是它总是有一个不关心T的类型,这使我相信,Somethinglt MustStop物业; TGT;实际需要非通用基本接口,能够如果Somethinglt检查; TGT;必须停止任何类型:如本{C}这将创建新的问题,如只有自身可用时,它有一个非泛型的DoSomething方法和事实,我需要一个我几乎所有的通用接口的非泛型基接口。这真的会弄乱代码{S0的}
class Program
{
static void Main(string[] args)
{
DerivedSomething thing = new DerivedSomething();
if (CheckMustStop<int>(thing))
{
Console.WriteLine("Stop!");
}
else { Console.WriteLine("Don't stop!"); }
Console.ReadKey();
}
static bool CheckMustStop<t>(Something<t> thing)
{
// This is where stuff gets nasty!
// An int is an Object, but casting will not work!
// Mind you that I know T is an int. In my own code I do not know this.
Something<Object> tempThing = (Something<Object>)thing;
return tempThing.MustStop;
}
}
public class DerivedSomething : Something<int>
{
public void DoSomething(int item)
{
// Do stuff here, <t> is important for item.
}
public bool MustStop
{
// <t> does not matter!
get { return true; }
}
}
public interface Something<t>
{
void DoSomething(T item);
bool MustStop { get; }
}
我希望,这进一步明确了我的问题。任何帮助是极大的赞赏{S0的}