zoukankan      html  css  js  c++  java
  • C#语言学习记录

    1.&& || ! 与或非—逻辑运算符,&&的优先级大于||。

    2.常量:定义时:const 类型 常量名称=常量值 如:const PI=3.14;在定义时赋值,在其他时候不能改变。

    3.枚举:让我们定义一种枚举类型,并且在定义这种类型是我们要指定这个类型的所有值,一般用来定义那些确定了所有情况的量

      语法:enum 自己定义的名称 {值1,值2,...,值n};枚举的定义一般和类定义在同一个级别(定义在命名空间之下)。比如:enum gender{male,female};

      定义枚举时值不能是Int类型。可以强制转换成Int类型,默认编号:0,1。。。。;也可以自己定义值enum gender{male=1,female};则后面的递增。

      字符串类型转换成枚举类型:(自定义枚举)(Enum.Parse(typeof(自定义枚举),待转换的字符串))。

    4.结构:一个整体有很多不同的属性,用结构来表示很多这种整体。如:存储一个人的所有信息:名字,性别等。和类定义在同一个级别。

      语法:访问修饰符 struct 结构名        public struct people 

          {            {  

            定义结构成员        public string name;

            方法等           public string sex;   

          }            }

    5.数组:可以帮我们一次性申明多个同类型的变量。这些变量在内存中是连续的。如 int[] age=new int[5];使用时通过下标来找。赋值可以:int[] age=new int[]{1,2,3...},数组名.Length获得数组的长度。

    6.函数(方法):将一堆代码进行重用的机制。可能有输入值,和返回值。 一般方法都要定义在class中。如果没有返回值,用void,一个方法只有一个返回值。调用:类.方法名。return退出方法。

      方法语法:[访问修饰服][static] 返回值类型 方法名([参数])

            {

              方法体

            } 

     一个变量定义在类的里面,就叫做类的字段,能被类中所有方法访问,但是静态(static)方法只能访问静态字段。方法不管是不是静态的都能访问常量。由const修饰的常量不能定义成为静态。

     7.方法重载:在同一类下,方法名相同,且方法的参数个数不同或同位置参数的类型不同才能构成方法重载。

    8.在方法中参数如果使用out了的话,一定要在方法中赋值,这个参数不是用来传入的是用来传出的,int.TryParse(s, out b); out可用于方法返回多个值。

     ref也能向方法里面传值又能向外面返值。如果用了out或者ref的话,那么调用者和方法中的参数都会相应改变(快捷方式)。

      

    完整课程

    • 属性(property):lable.text对象的一个特征或者特性。方法(method):xx.setbounds(x,y,w,h)设置对象的动作或者功能。事件(event):click  要用+=,指对象和外界的一种通知机制。
    • 程序的基本组成就是(class),变量以及方法等都要写在类里面。几点注意:对象的生成(new),事件的注册(+=)
    • c#的数据类型分为两大类:
      • 值类型(value type) 如:int double size  datetime数据直接存在栈,字符串类型前面加上@后就不转义。
      • 引用类型(refrence type) 如: button label person 数据存到堆,栈去存储引用信息
    • 无符号:sbyte(1个字节),short(2个字节),int(4个字节),      float(4个字节),double(8个字节)
    • 逻辑运算的短路运算:&&只要一边为假则另一边就不判断了,||只要一边为真另一边就不判断了。注意整形提升:byte,short,char运算时都转化成int
    • 数组:1先分配空间,2操作元素。数组的复制:Array.Copy(source(源数组),0,dest(目标数组),0,source.length)
    • :构造方法:在类的方法里面有一类特殊的方法,是完成对象的初始化,1、构造方法的方法名和类名相同,2、构造方法没有返回值也不能写void,构造方法不能显式的访问,要用new。
    • 属性:实际上是方法,比字段要多:可以只读写,可以检查if
    • 索引
      修饰符  类型 this[参数列表]
      {
          set{}
          get{}
      }    

      属性和索引是对字段进行访问和扩充

    • 继承:通过冒号来表示,都是单继承,默认所有类都是继承Object。如果需要的是一个父类的对象,来一个子类的对象是完全可以的。可以用as来强制类型转化,Student s1= p1 as Student (如果能转换就是New一个,如果不能转换就是null),as运算符只能针对引用类型。is运算符(用来判断一个对象是不是一个类(或者子类)的实例))if(p1 is Person)
      virtual public void SayHello(){ //定义方法 //virtual表示可以被子类override
              Console.WriteLine("Hello!  My name is " + name );
          }

       与父类同名的方法

      • 一是定义同名、但参数列表(签名)与父类不同的方法,这称为对父类方法的重载(Overloading)
      • 二是定义同名且参数列表也与父类相同的方法,这称为新增加一种方法,用new表示
      • 三是定义同名且参数列表也与父类相同的方法,而且父类的方法用了abstract或virtual进行了修饰,子类的同名方法用了override进行了修饰,这称为虚方法的覆盖(Overriding)
      • 使用base可以调用父类的方法。
    • 修饰符
      • 访问控制符:public:在任何地方都可以访问,private:只在同类中可以访问。protected:除了自己外,还可以在子类访问。internal:在相同程序集里面可以访问。protected internal:在子类和相同程序集里面可以访问。
      • static:不能访问实例变量,调用时要直接用类名去访问,有时候可以用来表示“全局变量”,属于类而非实例。
      • const:相当于静态常量,只能用于基本类型和string,还可以修饰局部变量。readonly:相当于不可变量,只能赋一次值,只能修饰字段。
      • sealed类:不可以继承,一般系统类(string console math),abstract类:不可实例化,要用(new)Array。abstract 类型 方法名(参数列表); abstract 类型 属性名{get;set;}
           小结:
    • public/private/internal/protected是访问控制符
    • static属于类的而非实例的
    • const常量readonly只读量
    • sealed不可继承的
    • abstract抽象的,不可实例化
    • 接口
          • 接口实际上是一个约定:Icloneable,接口是抽象的成员的集合,接口是一个引用类型,比抽象更抽象。
          • 定义接口:先约定好,再在别的地方实现
            public interface IStringlist
            {
                  void Add(string s);
                   int Count(get;);
                   string this[int index]{get;set;};           
            }   注意:public 和abstract这两个关键字不用写出来。
          • 实现接口:实现之前的约定的接口
            class 类名:[父类,]接口,接口
            {
                  public 方法(){...} 
            }
          • 显式接口成员实现:在实现多个接口有同名的方法时,方法名前要写接口名:void IWindows.close()。调用时只能用接口调用:((IWindows) f).close();
    • 结构以及枚举
        • :结构常用来表示较简单的多个分量(字段),可以有方法属性等成员。
          • struct是值类型的,是sealed的。结构不能包含无参数构造方法。
          • 在定义字段时不能给初始值。
          • 构造方法中必须对每个字段赋值。
          • 实例化时用new,但是与引用型变量的内存是不一样。
          • 值类型变量在赋值时是实行的是字段的copy
          • 枚举实质上来说是整数,是值类型,就是把几个可以列举的常量用符合来表示。
            enum mycolor
            {
                 red,
                 green=1,
                 yellow=2    
            }    
          • 赋值以及比较: mycolor c = mycolor.red if(c==mycolr.red) switch(c){case mycolor.red:..}
          • 与字符串的转化: console.writeline(c.tostring()) ; c = (mycolor)Enum.Parse(typeof(mycolor),"red");
          • 结构主要用来表示多个分量,枚举主要用来表示符合化的常量。他们都是值类型。
    • 委托
      • :委托是对函数原型的包装,也可以把多个函数同时绑定起来,调一下就可以依次全部调用了
        • 委托的声明: public delegate double Mydelegate(double x)
        • 委托的实例化: Mydelegate d=obj.method
        • 委托的调用: 委托名(变量) d(8.9)
        • 委托的合并:一个委托实例中可以包含多个函数,调用委托就是调用多个函数,函数间的顺序没有意义,返回值也没有意义。可以用运算符:+ - += -+来进行运算。 cd3= cd1+cd2//call m1 then m2
        • 跨线程调用一定要用invoke()函数,加一个委托。
        事件:>>>>回调函数,封装了委托类型的变量,使得:在类的内部,不管你声明它是public还是protected,它总是private的。在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同。
      • 事件的声明:public event 委托名 事件名 ,声明一个事件类似于声明了一个封装了的委托类型的变量。
      • 事件的注册与移除:事件名 +=或-=(在事件所在类的外面只能用以上两个运算符)
      • 事件的发生(激发):事件名(参数列表)-相当于回调所注册的函数
    • Lambda表达式
      • 泛型有一个<>。
      • 匿名方法:delegate(参数){方法体},隐私转化为委托:new Thread(delegate(参数){方法体})
      • lambda表达式就是对匿名方法的简写:(参数)=>(表达式或者语句) PlotForm(x=>x*x,1,12)
    • 运算符重载
      • public static 类型 oprator 一元运算符(类型 参数){。。。} :一元运算符的声明
      • public static 类型 operator 二元运算符 (类型 参数)(。。。) :二元运算符的声明
      • public static implicit operator 类型(类型 参数名){。。。} :类型转换运算符的声明
      • public static explicit operator 类型(类型 参数){。。。} :类型转换运算符的声明
    • 异常处理
      • try{......}
        catch(Aexception ex){  .....}
        catch(Bexception ex){ .....}
        catch(一般的异常 ex){.....}
        finally{.....}

        越仔细的异常写在前面,越一般的异常写在后面。

      • throw抛出异常: if(xxx) { throw new someexception(信息) } 
    •  基础算法
      • random类:.Next(100)(生成0~100之间的随机数),.NextDouble()(生成0~1之间的数),如果要用更强的随机数: System.Security.Cryptography .RNGCryptoServiceProvider 
      • DateTime类是值类型:new DateTime(),.now(取当前的时间),.tostring("yyyy-MM-dd HH:mm:ss")*(转化成字符串),.AddMinutes(5)(加5分钟),.Year .Mounth .Day .Date,   TimeSpan(两个日期相减得到一个时间差)
      • string类:Substring(inx,len)获取下标从inx开始长度为len的自字符串。.Trim() .TrimEnd()去空格,.Padleft()在左边填充空格,.Insert()插入,.Remove()移除,.Split(';')切片成数组,string.join()。string的内容不变(immutable),stringbuilder是可变的 .Append .Remove .Replace .length .Tostring 在循环中使用s+=...会带来效率问题,最好使用Stringbuilder。
      • 集合:数组(ArryList)或者哈希表(键值对)等,访问集合的时候可以用foreach(类型 变量 in xxx)。泛型:如list<string> 、字典,有更好的类型检查以及性能。
      • 遍试:把所以的情况都测试一遍。for中用if
      • 迭代:多次使用同一算法。while中用n=f(n)
      • 递归:分而治之。f(n)中用f(n-1)
    • 流和文件
      • Stream类:是信息流的一个抽象
        • 按存取位置分:FileStream(文件流),MemoryStream(内存流),BufferedStream(缓存流)
      • 读写类:对于内容的区别
        • BinaryReader和BinaryWriter(二进制读写)
        • TextReader和TextWriter(文本读写)
          • StreamReader和StreamWriter
          • StringReader和StringWriter
      • 其关系:包装的关系
      • FileSteam fs = new FileStream("C:A.TXT")
        StreamWriter wr = new StreamWriter(fs)
      • System.Io所包含的常用类:
        • Directory:公开用于创建、移动和枚举通过目录或子目录的statis方法
        • DirectoryInfo:公开用于创建、移动和枚举通过目录或子目录的实例方法
        • File:提供用于创建、复制、移动、打开和删除文件的静态方法,并协助创建FileStream对象
        • FileInfo:提供用于创建、复制、移动、打开和删除文件的实例方法,并协助创建FileStream对象
        • FileSteam:公开以文件为主的Stream。既支持同步文件操作,也支持异步文件操作。
        • StreamReader:实现一个TextReader,使其以一种特定的编码方式从字节流中读取字符。
        • StreamWriter:实现一个WriterReader,使其以一种特定的编码方式从字节流中写入字符。
        • TextReader:表示可读取连续字符的阅读器
        • TextWriter:表示可以编写一个有序字符系列的编写器。该类为抽像类。
        • FileSystemInfo:提供FileInfo和SystemInfo的共有方法,当你不确定是文件还是目录的时候使用。
      • 文本文件的操作:
        • 建立StreamReader:new StreamReader(文件路径,FileCode)StreamReader常用的方法有:readline(读一行), readtoend(全读),read,peek,close。
        • 建立StreamWriter:new StreamWriter(文件路径,filemode,filecode)  StreamWriter常用的方法有:writerline、writer、flush、close
      • 二进制文件的操作:
        • FileStream:使用其Seek、Read 方法。
        •  BinaryFormatter。二进制格式器,可以把文本等序列化到一个流里面,当然也可以反序列化。
              FileStream stream = new FileStream("C:\StrObj.t", FileMode.Create, FileAccess.Write ,
                      FileShare.None);
          formatter.Serialize(stream, book);
          
    • 控件
      • 常用控件要在实际中熟悉。
    • 绘图以及图像
      • GDI:Graphics Devices Interface:绘图技术。如下代码在一个事件中(点击按钮)然后采用Graphics来进行绘图。
      • Graphics g = this.CreateGraphics();
                    Pen pen = new Pen(Color.Red,2);
                    Brush brush = new SolidBrush(Color.Green);
                    Font font = new Font("宋体",25);
                    Rectangle rect = new Rectangle(180,180,160,160);
                    g.DrawLine(pen,20,100,140,100);
                    g.DrawRectangle(pen, rect);
                    g.DrawString("GDI图形编程",font,brush,20,20);
                    brush.Dispose();font.Dispose();pen.Dispose();g.Dispose();//关闭这些工具,不能占内存。
      • 对于Graphics对象的话一般在使用的时候: using(Graphics g = this.CreateGraphics()){........} 这种相当于try{...}finnaly{g.dipose()}
      • 图像处理:Bitmap(位图)是抽象类是从Iamge派生的,可以处理Jpeg,bmp等位图,
        Bitmap bt1 = new Bitmap("dada\da.bmp")
        Bitmap bt2 = new Bitmap(bt1,200,300)
        Bitmap bt3    bt3.FromFile("文件名称")

        DrawImage:绘制图像。

      • 文本处理以及正则:
        • 文本处理常用类:Console类,.Write(打印),.WriteLine(打印一行),.ReadLine(读取一行)。String类:是固定的每次运算都会生成新的对象,StringBuilder类:不是每次都会新的对象,可以用Add等方法。System.Text.Encoding类:.Default(系统默认的编码),.UTF8,.GetEncoding("GBK232")给定编码,.GetBytes(str)得到一个字符串的字节,GetString(byte[])得到一个字节数组的字符串。
        • 正则表达式:Regex类:Static方法:Regex.IsMatch(s,pattern)(是否匹配)、Regex.Match(s)(匹配一次),Regex.Matchs(s)(匹配多次),Regex.Replace(s,pattern)(替换)。Match对象(匹配的结果),.Groups各组,.value原串,.Result(XXX)替换。(?<名称>XXXX)对分组进行命名、在替换时使用${名称},若不命名则用$1,$2等,$0表示全部匹配。(?i:xxxx)表示选项(忽略大小写),http://www.jb51.net/article/360.htm

     面向对象

  • 相关阅读:
    Oracle DBMS_PROFILER 的使用方式 (转)
    2010-09-01 22:29 oracle建表、建主键、外键基本语法
    Oracle11g对AWR的扩展
    Oracle中各个命中率的总结及调优笔记整理
    如何用 SQL Tuning Advisor (STA) 优化SQL语句
    aix分配硬盘
    AIX tar命令
    linux gzip命令参数及用法详解--linux压缩gzip文件命令
    AIX6.1下配置Nmon性能工具
    qqq
  • 原文地址:https://www.cnblogs.com/jackcheblog/p/6253345.html
Copyright © 2011-2022 走看看