首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> VC.NET >> 正文

实例解析C++/CLI中的接口与泛型

  泛型

  就像函数能用一个或多个类型表示符来定义一样,类型也可以这样来定义。假如有这样一种情况,某种类型建模了一个"数组",其可使用下标来访问每个元素,这样的类型往往被称为"向量",实现一个向量之后,可以保存一组int、一组double、或一组用户自定义类型的元素。然而,正是因为每种类型实现的代码对类型中的元素来说,都是唯一的,因此,可使用泛型机制来定义一个向量类型,并创建特定类型的实例。例10就是这样的一个例子。

  例10:


generic <typename T>
public ref class Vector
{
 int length;
 /*1*/ array<T>^ vector;
 public:
  property int Length
  {
   int get() { return length; }
   private:
    void set(int value) { length = value; }
  }
  /*2*/ property T default[int]
  {
   T get(int index) { return vector[index]; }
   void set(int index, T value) { vector[index] = value; }
  }
  Vector(int vectorLength, T initValue)
  {
   Length = vectorLength;
   vector = gcnew array<T>(Length);
   for (int i = 0; i < Length; ++i)
   {
    /*3*/ this[i] = initValue;
   }
   /*4*/ //for each (T element in vector)
   //{
    // element = initValue;
   //}
  }
  Vector(int vectorLength)
  {
   Length = vectorLength;
   vector = gcnew array<T>(Length);
   for (int i = 0; i < Length; ++i)
   {
    /*5*/ this[i] = T();
   }
  }
  Vector()
  {
   Length = 0;
   /*6*/ vector = gcnew array<T>(0);
  }
  ~Vector() //多余的
  {
   /*7*/ vector = nullptr;
  }
  virtual String^ ToString() override
  {
   String^ s = "[";
   int i;
   for (i = 0; i < Length - 1; ++i)
   {
    /*8*/ s = String::Concat(s, this[i], ":");
   }
   /*9*/ s = String::Concat(s, this[i], "]");
   return s;
  }
  virtual bool Equals(Object^ obj) override
  {
   if (obj == nullptr)
   {
    return false;
   }
   if (this == obj) //在测试自身吗?
   {
    return true;
   }
   /*10*/ if (GetType() == obj->GetType())
   {
    Vector<T>^ v = static_cast<Vector^>(obj);
    if (Length != v->Length) //是否向量有不同的长度?
    {
     return false;
    }
    for (int i = 0; i < Length; ++i)
    {
     /*11*/ //if (this[i] != v[i])
     if (this[i]->Equals(v[i]) == false)
     {
      return false;
     }
    }
    return true;
   }
   return false;
  }
  /*12*/ virtual int GetHashCode() override
  {
   return 0;
  }
};


 

上一页  [1] [2] [3] [4] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航