C#笔记

1.数据类型
  数值类型:char , double ,float ,int ,bool ,decimal ,结构体 ,枚举 ...
  引用类型:数组 ,String ,委托 ...
  注意的是String也是引用类型
  还有就是关于装箱,拆箱的问题(大的数据类型转换为小的为拆箱,反之为装箱)注意装箱是把数据类型也装入了;
  举例如下:
          (装箱) double k = 3.3;
            object g;
            g = k;
            Console.WriteLine(g);
            这个就是装箱,但是装箱会很耗系统资源;
             double k = 3.3;
            object g;
            g = k.ToString();
            Console.WriteLine(g);
            这样就不会消耗太多系统资源,因为string型也是引用类型不用转;
         (拆箱)
            object k = 5;
            int i;
            i = int.Parse(k.ToString());
            Console.WriteLine(i);
            拆箱的时候必须转化为原来装箱时的数据类型,不然会出错;
           
  object是所有数据类型的父类,他是引用类型其实多数的引用类型都是类,所有的数值类型都是结构体
 
  注意:
      float k = 1.5;
      Console.WriteLine(k);
      这样是不对的,因为系统默认是double,所以必须显示的表示,所以要在1.5后加f;
      与float相同的还有decimal也要加后缀M或者m;
      其他的一次类推,实践才会知道;
     
  关于引用类型和数值类型的比较:数值类型存储在线程堆栈中,而引用类型存储在委托敦中;
  for example:
                int a = 3;
            int b = 5;
            Console.WriteLine(a);
            Console.WriteLine(b);
            changnum chk = new changnum();
            chk.chang(a, b);
            Console.WriteLine(a);
            Console.WriteLine(b);
        }

        class changnum
        {
            public void chang(int a, int b)
            {
                int temp;
                temp = a;
                b = a;
                b = temp;
            }
        这个就是值传递;传后数值不变
            int[] arri = new int[] { 8};
            int[] arrj;
            arrj = arri;
            arrj[0] = 100;
            Console.WriteLine(arri[0]);
        这个就是引用类型,区别在于引用类型的发生了交换;
       
  数组的定义:int[] arri=new int[]{1,3,5.....};这样比较简单
              也可以是:int[] arri=new int[5];
                        arri[0]=1;
                        arri[1]=2;
                        ................


2.流程控制

   1.for语句,while语句,do while语句,switch语句,if..else..语句
     这个C已经很清楚的话就没问题
   2.foreach语句
     这个C中是没有的,下面举个例子
            int[] arri = new int[3];
            arri[0] = 7;
            arri[1] = 8;
            arri[2] = 9;
            foreach (int i in arri)
            {
                Console.WriteLine(i);
            }
      遍历整个数组;
     
     
 3.集合和数组
  
    有两种堆栈,和队列
   
      堆栈:先进后出(FILO)
            Stack<int> stk = new Stack<int> { };
            stk.Push(1);
            stk.Push(2);
            foreach(int i in stk)
            {
                Console.WriteLine(i);
            }
            取出用push,取出来看是peek;
      队列:FIFO
            Queue<int> que = new Queue<int> { };
            que.Enqueue(1);
            que.Enqueue(2);
            foreach (int i in que)
            {
                Console.WriteLine(i);
            }
            取出是Dequeue,取出来看是peek;
      hashtable:
            HashSet<int> hs = new HashSet<int> { };
            hs.Add(1);
            hs.Add(2);
            hs.Add(3);
            foreach (int i in hs)
            {
                Console.WriteLine(i);
            }
            还有交错数组就不说了;

3.面向对象(慢慢想,比较抽象)

    class Program
    {
        static void Main(string[] args)
        {
            car car1 = new car();
            string name=car1.name;
            Console.WriteLine(name);
            car1.menony();
        }
      
    }
    public class car
    {
        public string  name="兰博基尼";
        public void menony()
        {
            Console.WriteLine("$1000000000");
        }
    }

4.类的语法....(4种)
  1.普通的类
   public class car
    {
        public string  name="兰博基尼";
        public void menony()
        {
            Console.WriteLine("$1000000000");
        }
    }
  2.静态类
    static void Main(string[] args)
        {
            car car1 = new car();
            string name=car1.name;
            Console.WriteLine(name);
            car1.menony();
        }
  3.抽象类abstract
  4.密封类sealed
 
5.继承


  普通函数的继承:
       static void Main(string[] args)
        {
            ZClass zl = new ZClass();
            zl.F1();
            FClass fl = new FClass();
            fl.F1();
            C#中还允许用子类实现父类
            比如
             FClass fl = new ZClass();
             fl.F1();
        }
       
        class FClass
         {
            public void F1()
          {
            Console.WriteLine("F1 father");
          }
         }
        class ZClass:FClass
         {
 
          }
   
        私有成员不能继承;
        internal是本应用程序中可以与public等同;
        protected是只能在子类中访问;

        子类可以影藏父类的方法属性等,可以用new关键字或者没有都可以;
        如果要覆盖就用virtul和override关键字,这样的话,用子类实例父类的时候条用的是子类的方法和属性,因为已经覆盖;
        关键字中乐意没有virtul但是不能没有override;

 2.静态类
   不能被继承;
   但静态方法和属性属于类;
  
 3.密封类
   也不能被继承;
  
 4.抽象类
  
   抽象类中的抽象方法等不能在抽象类中实现,只能定义;
   抽象类中的抽象方法等定义,必须在继承它的类中实现;
   抽象类不能实例,只能通过它的子类来实现,并且实现时应该用override关键字覆盖;
  
  
   关于构造函数的继承,应该是不能继承的,但是如果实现子类的构造方法和父类的构造方法
   不一致,那么我们必须base关键字调用父类的构造函数;
   this关键字自己看,一样的!
  
  
  

接口:
     接口可以继承接口,抽象类可以继承接口;
     类可以继承接口,接口不能继承类;
     具体的在研究设计模式的时候再深入;
     类只能单重继承,接口可以多重继承;
    
    
委托和事件:
    delegate  and event
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值