C#接口功能定义具体实现
如何实现下面接口中定义的功能?当我在VS2010中实现时,就像下面一样。MyType变灰,不再重新注册该类型?谢谢C#接口功能定义具体实现,c#,generics,interface,implementation,C#,Generics,Interface,Implementation,如何实现下面接口中定义的功能?当我在VS2010中实现时,就像下面一样。MyType变灰,不再重新注册该类型?谢谢 public interface IExample { T GetAnything<T>(); } public class MyType { //getter, setter here } public class Get : IExample { public MyType GetAnything<MyType>() { ^^^
public interface IExample
{
T GetAnything<T>();
}
public class MyType
{
//getter, setter here
}
public class Get : IExample
{
public MyType GetAnything<MyType>()
{ ^^^^^^^ ^^^^^^
MyType mt = new MyType();
^^^^^^^^^^^^^^^^^^^^^^^^^^ /* all greyed out !!*/
}
}
公共接口示例
{
我什么也得不到;
}
公共类MyType
{
//盖特,塞特在这里
}
公共类Get:IExample
{
公共MyType GetAnything()
{ ^^^^^^^ ^^^^^^
MyType mt=新的MyType();
^^^^^^^^^^^^^^^^^^^^^^^^^^/*全部变灰*/
}
}
制作一个通用的接口IExample
,然后使用具体类型类Get:IExample
实现它,如下例所示
public interface IExample<T> where T : new()
{
T GetAnything();
}
public class Get : IExample<MyType>
{
public MyType GetAnything()
{
MyType mt = new MyType();
return mt;
}
}
public class MyType
{
// ...
}
公共接口示例,其中T:new()
{
我什么也得不到;
}
公共类Get:IExample
{
公共MyType GetAnything()
{
MyType mt=新的MyType();
返回mt;
}
}
公共类MyType
{
// ...
}
制作一个通用的接口IExample
,然后使用具体类型类Get:IExample
实现它,如下例所示
public interface IExample<T> where T : new()
{
T GetAnything();
}
public class Get : IExample<MyType>
{
public MyType GetAnything()
{
MyType mt = new MyType();
return mt;
}
}
public class MyType
{
// ...
}
公共接口示例,其中T:new()
{
我什么也得不到;
}
公共类Get:IExample
{
公共MyType GetAnything()
{
MyType mt=新的MyType();
返回mt;
}
}
公共类MyType
{
// ...
}
丹尼斯的答案看起来像你想要的,但万一不是,为了让你的代码正常工作,你可以这样做,但我不确定这到底有多大价值
public class Get : IExample
{
public T GetAnything<T>()
{
return default(T);
}
}
public void X()
{
var get = new Get();
var mt = get.GetAnything<MyType>();
}
public类Get:IExample
{
公众什么也得不到
{
返回默认值(T);
}
}
公共空间X()
{
var get=new get();
var mt=get.GetAnything();
}
丹尼斯的答案看起来像你想要的,但万一不是,为了让你的代码正常工作,你可以这样做,但我不确定这到底有多大价值
public class Get : IExample
{
public T GetAnything<T>()
{
return default(T);
}
}
public void X()
{
var get = new Get();
var mt = get.GetAnything<MyType>();
}
public类Get:IExample
{
公众什么也得不到
{
返回默认值(T);
}
}
公共空间X()
{
var get=new get();
var mt=get.GetAnything();
}
方法的类型参数T
隐藏接口的类型参数T
;他们有相同的名字,但他们是独立的。@phoog是的,谢谢。但我认为您可以删除该方法的类型参数。相应地更新了我的代码示例。您在接口声明中忘记了where T:new()是的,我想这正是你想要的。OP是否试图在单个集合中存储同质的IExample
s还有待观察;“这通常是人们想要的,当然这会使事情变得有些复杂。”拉法拉尔萨斯几分钟前已经补充道。不过还是谢谢你。在没有编译器的情况下编写代码时,我总是忽略这些细节。一旦粘贴到VS中,它就会变得明显。方法的类型参数T
隐藏接口的类型参数T
;他们有相同的名字,但他们是独立的。@phoog是的,谢谢。但我认为您可以删除该方法的类型参数。相应地更新了我的代码示例。您在接口声明中忘记了where T:new()是的,我想这正是你想要的。OP是否试图在单个集合中存储同质的IExample
s还有待观察;“这通常是人们想要的,当然这会使事情变得有些复杂。”拉法拉尔萨斯几分钟前已经补充道。不过还是谢谢你。在没有编译器的情况下编写代码时,我总是忽略这些细节。一旦粘贴到VS中,它就会变得明显。这对它有感觉…这对它有感觉。。。