“class”不包含“方法”的定义,但它在那里
´class´ does not contains a definition for ´method´ but it´s there
我有一个class如下
public class EntityBase
{
// other code
public virtual void SetDataContext(IDataContext context) { throwNotImplemented("SetDefaultDataContext"); }
protected void throwNotImplemented( string mname )
{
throw new Exception( String.Format( "Method {0} is not implemented") );
}
}
throwNotImplemented 的目的是强制派生的 classes 实现虚拟方法,就好像它们是抽象的一样。
然后我有一个class引用了EntityBase,如下
public class BasePresenter<IDataContextFactory, IDataContext, EntityBase>
where IDataContextFactory : class, new() where IDataContext : class where EntityBase : class
{
public IDataContext dataContext;
public BasePresenter( IDataContext dc, EntityBase sample)
{
dataContext = dc;
sample.SetDataContext(dataContext);
}
// more code
}
编译器卡在这个错误中:
'EntityBase' 不包含 'SetDataContext' 的定义,也没有扩展方法...等等
谁或什么错了?
TIA
在您的泛型 class 中,标识符 EntityBase
代表一个泛型参数。这从作用域中隐藏了名为 EntityBase
的 class。特别是,这意味着
I have a class that references EntityBase
错了。
由于通用参数 EntityBase
的唯一约束是 : class
,因此您可以使用的唯一成员是在 object
上找到的成员,例如 GetHashCode()
、GetType()
, 和 ToString()
.
您将 EntityBase 用作 <> 中的通用类型参数,并将其约束为类型 "class" 的后代。所以任何class。因此,编译器无法知道 EntityBase 是否是您的 EntityBase class 的实际继承体。您可能想要做的只是从 <>.
之间剥离 EntityBase 泛型类型
我有一个class如下
public class EntityBase
{
// other code
public virtual void SetDataContext(IDataContext context) { throwNotImplemented("SetDefaultDataContext"); }
protected void throwNotImplemented( string mname )
{
throw new Exception( String.Format( "Method {0} is not implemented") );
}
}
throwNotImplemented 的目的是强制派生的 classes 实现虚拟方法,就好像它们是抽象的一样。
然后我有一个class引用了EntityBase,如下
public class BasePresenter<IDataContextFactory, IDataContext, EntityBase>
where IDataContextFactory : class, new() where IDataContext : class where EntityBase : class
{
public IDataContext dataContext;
public BasePresenter( IDataContext dc, EntityBase sample)
{
dataContext = dc;
sample.SetDataContext(dataContext);
}
// more code
}
编译器卡在这个错误中:
'EntityBase' 不包含 'SetDataContext' 的定义,也没有扩展方法...等等
谁或什么错了?
TIA
在您的泛型 class 中,标识符 EntityBase
代表一个泛型参数。这从作用域中隐藏了名为 EntityBase
的 class。特别是,这意味着
I have a class that references EntityBase
错了。
由于通用参数 EntityBase
的唯一约束是 : class
,因此您可以使用的唯一成员是在 object
上找到的成员,例如 GetHashCode()
、GetType()
, 和 ToString()
.
您将 EntityBase 用作 <> 中的通用类型参数,并将其约束为类型 "class" 的后代。所以任何class。因此,编译器无法知道 EntityBase 是否是您的 EntityBase class 的实际继承体。您可能想要做的只是从 <>.
之间剥离 EntityBase 泛型类型