+ -
当前位置:首页 → 问答吧 → C#泛型入门问题

C#泛型入门问题

时间:2011-12-09

来源:互联网

从C++转过来的,在C#也想实现一些实用功能

  public class MyClass<T>
  {
  public T m_data = new T(); 能否在这里new T()?
  public void foo(){m_data.foo();} 能否调用T类型的foo成员函数?
  }

作者: Cowboy22   发布时间: 2011-12-09

public T m_data = new T(); 能否在这里new T()?

可以

public void foo(){m_data.foo();} 能否调用T类型的foo成员函数?

不可以

作者: Sandy945   发布时间: 2011-12-09

public class MyNode<T>
  {
  public T m_data = new T();
  public String MyToString(){return m_data.ToString();}
  }

new T()也不行,通不过:
错误 2 变量类型“T”没有 new() 约束,因此无法创建该类型的实例 E:\lib\wince\protocolLib\PktParser.cs 27 27 protocolLib

作者: Cowboy22   发布时间: 2011-12-09

public class MyNode<T>
=>
public class MyNode<T> where T: new ()

作者: Sandy945   发布时间: 2011-12-09

T.ToString()可以,但自定义的不行

作者: Cowboy22   发布时间: 2011-12-09

C#的模板这么弱吗?

作者: Cowboy22   发布时间: 2011-12-09

你可以使用

dynamic

作者: Sandy945   发布时间: 2011-12-09

加where T: new ()后,可以new了

作者: Cowboy22   发布时间: 2011-12-09

dynamic 这么用吗?
public class MyNode<T>where T:new()
  {
  public T m_data = new T();
  public String MyToString(){return m_data.ToString();}
  public void foo() {
  dynamic data = m_data;
  data.foo();
  }
  }
但还报错:
错误 2 找不到类型或命名空间名称“dynamic”(是否缺少 using 指令或程序集引用?) E:\lib\wince\protocolLib\PktParser.cs 30 13 protocolLib

查到C#4.0中引入了动态类型机制,我是vs2005,不知支不支持C#2.0?

作者: Cowboy22   发布时间: 2011-12-09

作者: hefeng_aspnet   发布时间: 2011-12-09

2.0不行

作者: Sandy945   发布时间: 2011-12-09

被打败了,还是换OO来实现。。。

作者: Cowboy22   发布时间: 2011-12-09

相关阅读 更多