zoukankan      html  css  js  c++  java
  • 抽象自定义泛型小笔记

    public static class SomethingFactory<T> where T:MyObj

            这样在使用SomethingFactory的时候就只能传入MyObj类型或MyObj的派生类型啦

            注意:

              还可以写成这样

              where T:MyObj,new()

              来约束传入的类型必须有一个构造函数。  

    在实际开发中,我们也经常需要定义自己的泛型类型

            来看下面的代码:        

    复制代码
              public static class SomethingFactory<T>
              {
                  public static T InitInstance(T inObj)
                  {
                      if (false)//你的判断条件
                      {
                          //do what you want...
                          return inObj;
                      }
                      return default(T);
                  }
              }
    复制代码

            这段代码的消费者如下:        

                  var a1 = SomethingFactory<int>.InitInstance(12);
                  Console.WriteLine(a1);
                  Console.ReadKey();

            输出的结果为0

    如果你想返回T类型的空值,那么请用default(T)这种形式

                因为你不知道T是值类型还是引用类型,所以别擅自用null

    注意:如果这里使用Hashtable、Queue或者Stack等非泛型的容器

            就会导致装箱操作,损耗性能。因为这些容器只能存储Object类型的数据

          <2>泛型类型

            List<T>、Dictionary<TKey, TValue>等泛型类型都是.net类库定义好并提供给我们使用的

     <1>做foreach循环时多考虑线程安全性      

            在foreach时不要试图对被遍历的集合进行remove和add等操作

            任何集合,即使被标记为线程安全的,在foreach的时候,增加项和移除项的操作都会导致异常

            (我在这里犯过错)

          <2>IEnumerable接口是LINQ特性的核心接口

            只有实现了IEnumerable接口的集合

            才能执行相关的LINQ操作,比如select,where等

            这些操作,我们接下来会讲到。

  • 相关阅读:
    线程和进程
    Java多线程实现(四种方法)
    Java中的锁
    synchronized和java.util.concurrent.locks.Lock
    Lock的实现类ReentrantLock&Condition类的await/signal/signalAll(生产者消费者场景)
    synchronized&Object类的wait/notify/notifyAll(生产者消费者场景)
    SQL语句优化
    面试
    数据库三大范式
    设计模式之JDK动态代理源码分析
  • 原文地址:https://www.cnblogs.com/x-poior/p/5163100.html
Copyright © 2011-2022 走看看