C#接口功能定义具体实现

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>() { ^^^

如何实现下面接口中定义的功能?当我在VS2010中实现时,就像下面一样。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中,它就会变得明显。这对它有感觉…这对它有感觉。。。