C# 我怎样才能避免双重铸造?

C# 我怎样才能避免双重铸造?,c#,interface,casting,C#,Interface,Casting,我得到了以下类层次结构: MssqlDataSource:DataSource:IDataSource:IQueryable 在MssqlDataSource类中,我获得了以下属性: private Table<T> Table { get { return (Table<T>)(IQueryable<T>)this; } } 生成: 那么如何解决呢?如何仅使用一个铸件(或更好的是不使用铸件)来避免组合错误?为什么会出现呢?根据这一点: MssqlDat

我得到了以下类层次结构:

MssqlDataSource
DataSource
IDataSource
IQueryable

MssqlDataSource
类中,我获得了以下属性:

private Table<T> Table { get { return (Table<T>)(IQueryable<T>)this; } }
生成:


那么如何解决呢?如何仅使用一个铸件(或更好的是不使用铸件)来避免组合错误?为什么会出现呢?

根据这一点:

MssqlDataSource<T>:DataSource<T>:IDataSource<T>:IQueryable<T>
MssqlDataSource:DataSource:IDataSource:IQueryable
MssqlDataSource
不从
表继承


为什么要进行此铸造?

是否有可能将
MssqlDataSource
标记为
密封的
。。。但请参阅我刚才问的,可能会扩大理解,但可能不会直接回答它。@AgentFire
as
实际上可以更快,因为它不会对cast进行类型检查。如果项目的类型正确,最终结果将与强制转换的行为相同。这一切都与编译器保证有关,这基本上是将责任从编译器转移到运行时。@AgentFire我明白这一点,但是您希望删除强检查(和错误),但始终希望类型是表类型的实例。要么100%确定并使用
作为
,要么只进行手动铸造。@AgentFire:看来
这个
不是一个
。那么,为什么要将其转换到
表中呢?我不明白你为什么担心性能,而你甚至还没有让代码正常工作。。。
MssqlDataSource<T>:DataSource<T>:IDataSource<T>:IQueryable<T>