泛类型

1  用途

   功能模块非常相似,只是处理的数据不同。

   通过继承,子类拥有父类的一切行为和属性,任何出现父类的地方都可以使用子类替换。

   使用继承object基类,可以解决类似泛型的问题,但存装箱与拆箱而影响性能的问题。

2 特点

   延迟声明:调用时才指定参数类型;

   泛型是语法结构,非语法糖;

   效率高于继承,用stopwatch测量其性能;

3 c#新语法——将主构造函数定义为类声明的一部分

public class Container
{
    private int _capacity;

    public Container(int capacity) => _capacity = capacity;
}

 

   

public class Container(int capacity)
{
    private int _capacity = capacity;
}

4  【泛型类定义】、【将主构造函数定义为类声明的一部分】与【类继承】一起使用

    有了下边的例子,这种新的语法结构应该可以理解了。

    public class KType
   {
   }
    public class KBaseType
    {
    }

    public class KOption<KType>
    {
    }

public class KBaseDBContext<KBaseType>(KOption<KType> option, string name)
{
    KOption<KType> _option = option;
    string _name = name;
    public KBaseDBContext() 
        : this(new KOption<KType>(),string.Empty) 
    { 
    }
}
public class KDBContext(KOption<KType> option, string name):KBaseDBContext<KBaseType>(option, name)
{
    public KDBContext()
        :this(new KOption<KType>(), "Kerry")
    {

    }
}

public class KDBContextEx: KBaseDBContext<KBaseType>
{
    public KDBContextEx()
        : base(new KOption<KType>(), "Kerry")
    {

    }
}

5 泛型实例

delegate T NumberChanger<T>(T n);
public class KGenericArray<T>(int size)
{
    private  T[] _array = new T[size];
    public void Clear()
    {
        Array.Clear(_array, 0, _array.Length);
    }
    public T? GetItem(int index)
    {
        T? result = default(T);
        if (_array.Length > index)
        {
            result = _array[index];
        }
        return result;
    }
    public void SetItem(int index, T item)
    {
        if (index < _array.Length)
        {
            _array[index] = item;
        }
    }
    public void Swamp(ref T par1, ref T par2)
    {
        T temp = par1;
        par1 = par2;
        par2 = temp;
    }

    public static void Display()
    {
        NumberChanger<int> counts = new NumberChanger<int>(AddNum);
        NumberChanger<double> scores = new NumberChanger<double>(AddScore);
        int counter = counts(25);
        double Score = scores(34.45);

    }

    static int num = 0;
    static double score = 0;

    public static int AddNum(int p)
    {
        num += p;
        return num;
    }

    public static double AddScore(double s)
    {
        score += s;
        return score;
    }
View Code

 

posted on 2025-05-07 16:58  博观约取*厚积薄发  阅读(14)  评论(0)    收藏  举报