泛型类

1、类型是对象的模板,泛型不是类型,是类型的模板。c#提供五种泛型:类,结构,接口,委托和方法。

2、声明泛型类和普通类的区别

<1>在类名之后放置<>

<2>在<>中用逗号分隔的占位符字字符串表示提供的类型-类型参数(type parameter)

<3>在泛型类声明的主体中使用类型参数来表示应该被替代的类型

class Name<parameter1,paremeter2...>

{public parameter1 demo=new parameter1();...}

在泛型声明中没有特殊的关键词或标志

3、创建构造类型

用真实类型(类型实参)替代占位符,编译器获取这些真实类型并从它创建一个真实类型对象

class Name<type parameter> {},Name< type Argument>{}

如下:

泛型类声明:class Encounter<T1,T2>{T1 var1;T2 var2;},编译器接受类型实参,产生构造类型如:class Encounter<DateTime,string>{DateTime encounter;string Name;}

4、创建变量和实例:

<1>分配类变量:

class Encounter<DateTime,string>  justForYou;//在栈上为justForYou分配一个引用-null

<2>分配实例

justForYou=new Encounter<DateTime,string>();//在堆上分配实例,并且把引用赋值给变量JustForYou(),[原来是这样,所以声明引用类型,不对它初始化,直接使用它时编译器得到null,即表明堆中并没有关于它的数据的引用(reference=null),因此throw NullReferenceException]

 class Generic_Demo<T>
    {
        public int ArrayLength=5;
        public T[] PushItem;
        public int StackPointer = 0;
        public int StackMaxSize=10;
        public bool IsStackFull { get { return StackPointer > StackMaxSize; } }
        public bool IsStackEmpty { get { return StackPointer < 0; } }
        public T[] Push(T[] x)
        {
           PushItem = new T[x.Length];
            if (!IsStackFull)
            {
                for (int i = 0; i < x.Length; i++)
                {
                    PushItem[StackPointer++] = x[i];
                }

            }
            return PushItem;
        }
        public void Sorted(T[] array_Unsorted)
        {
          T  temp;
          T[] array_Sorted=new T[ArrayLength];
          for (int i = 0; i < ArrayLength-1; i++)
          {
              for (int j = 0; j < ArrayLength; j++)
              {
                  temp = array_Unsorted[i];
                  if ( Convert.ToInt16(array_Unsorted[i]) >Convert.ToInt16( array_Unsorted[i + 1]))
                  {
                      temp = array_Unsorted[i];
                      array_Unsorted[i] = array_Unsorted[i + 1];
                      array_Unsorted[i + 1] = temp;
                  }

              }
          }
          for (int k = 0; k < array_Unsorted.Length; k++)
          {
            array_Sorted[k] =  array_Unsorted[k];
          }
          Console.WriteLine("排序后数组:");
          for (int i = 0; i < array_Sorted.Length; i++)
          {
              Console.WriteLine("array_Sorted[{0}]:{1}", i,array_Sorted[i]);
          }

          Console.Read();
        }
    }

static void Main(string[] args)
{
  int[] arr = new int[]{ 3,1,2,8,6 };
            Generic_Demo<int> def = new Generic_Demo<int>();
            def.Push(arr);
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine("{0}", def.PushItem[i]);
            }
            def.Sorted(def.PushItem);
            Console.Read();

}

.......后续更新....

时间: 2024-10-24 04:54:07

泛型类的相关文章

Java泛型类泛型方法

使用泛型,在某些情况下可以有效减少代码量. Pair泛型类可以根据传入的参数类型进行相应的构造. minmax是泛型方法,不同数据类型的数组,也可以得到他们的min max值,需要注意的是传进去的T[]类类型必须是实现了Comparable方法的,否则无法调用compareTo()方法. 另外,泛型的类型必须是类类型,int, double, float这种是不行的,必须是Integer, Double, Float, String, StudentClass这种类类型的. /** 泛型类 *

19._7泛型继承之泛型类继承普通类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._7泛型继承之泛型类继承普通类 { abstract class genClass<T> { protected T field; public virtual T property { get { return field; } } p

Java泛型学习笔记 - (二)泛型类

1. 我们先写一个没有泛型的类Box: 1 public class Box { 2 3 private Object obj; 4 5 public Box() {} 6 7 public Object getObj() { 8 return obj; 9 } 10 11 public void setObj(Object obj) { 12 this.obj = obj; 13 } 14 15 public Box(Object obj) { 16 super(); 17 this.obj

泛型类的标记扩展

原文出处:http://www.codeproject.com/Tips/871592/Markup-Extension-for-Generic-classes 标记扩展运行你再Xaml中声明泛型类. 简介: 我们经常要在Xaml中的style或DataTemplate或相似的地方使用泛型类. 然而.Net不允许在xaml中声明泛型.我们需要解决这个问题.本文提供的解决方案已经在很多案例中解决这个问题. 使用代码: 通过使用这里提供的新的扩展,你就能够在xaml中使用泛型. <DataTempl

泛型学习第二天——C#中的List&lt;string&gt;泛型类示例

在C#代码中使用一系列字符串(strings)并需要为其创建一个列表时,List<string>泛型类是一个用于存储一系列字符串(strings)的极其优秀的解决办法.下面一起有一些List<string>泛型类的示例,一起来看看吧. List示例 下面是一个使用C#创建一个新的一系列字符串的列表的示例,利用foreach语句循环使用其每一个字符串.请注意在代码片段的顶部添加所需的命名空间:“using System.Collections.Generic;”,List是该命名空间

Java泛型:泛型类、泛型接口和泛型方法

原文出自:https://segmentfault.com/a/1190000002646193 泛型类 public class Container<K, V> { private K key; private V value; public Container(K k, V v) { key = k; value = v; } public K getKey() { return key; } public void setKey(K key) { this.key = key; } pu

泛型程序设计---泛型类的定义

泛型程序设计,程序设计都明白什么意思,那泛型呢?什么是泛型? 所谓泛型是指:额...好吧,说不清...举个例子吧:古代的宗教道教中有一句话,道生一,一生二,二生三,三生万物.这里的道即对应程序设计中的泛型,泛型很抽象,我也说不出所以然...(大家可以在文章下方留言讨论) 那么怎么定义泛型类呢? 语法如下: 在看语法之前,需要先了解 类型变量的概念.所谓类型变量是指:可以代替任何类型的一个变量,在定义时,可以使用字符(一般大写,且一般用T及其附近的字符):实际,声明泛型类的变量时,需要使用具体的类

GenericDemo2 泛型类的使用

/** *    泛型的前世今生(泛型类的使用) *    [学习结果]     1,了解泛型类,泛型方法,泛型接口的定义体现形式.     2,自定义泛型类,体会泛型前和泛型后的区别★★★★★ [目标:自定义泛型] 1,没有泛型之前,对于不确定的对象类型,是通过Object类型多态方式解决的.          弊端:当对象提升为Object后,需要向下转型才可以使用对象的内容.          而转型就会有运行发生ClassCastException异常的风险.    2,有了泛型后,将不

泛型简介,泛型类及使用

如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同.那么我们该如何去做? ①   创建多个类文件,给每个类中的成员变量设置指定的数据类型; 1 public class Demo1{ 2 public static void main(String []args){ 3 MyClass1 myclass1=new MyClass1("张三"); 4 System.out.println(myclass1.getData()); 5 MyClass2 myc