c#初识

1.NET Framework 包括了三大部分:第一个部分是Common Language RuntimeCLR,所有.NET 程序语言公用的执行时期组件),第二部分是共享对象类别库(提供所有.NET 程序语言所需要的基本对象),第三个部分是重新以组件的方式写成的ASP.NET(旧版本则是以asp.dll提供ASP 网页所需要的对象)。 

2.c#的数据类型可以分为数值和非数值两大类,数值又可以分为整型非整型,非数值又包括字符类型字符串类型

3.变量的命名原则必须以字母_或者@符号开头,不能以数字开头,变量名不能与C#中的关键字重复,而且大小写是敏感的

4.const 数据类型 常量名 常量值 常量在定义时赋值,其他地方不允许赋值。常用于程序中一些不可改变的变量的修饰。

5.枚举的好处在于限定了变量值的取值范围

//定义一个枚举类型

     enum  sex:int
 {
  男 = 0
   女 = 1
 }
    //申明一个枚举变量

     enum  UserSex

     UserSex = sex.男;

     如果我们要获取男所对应的保存值,则可以使用

     (int)UserSex

6.访问修饰符  struct  结构名

{
  访问修饰符 数据类型  结构成员; 
}
使用结构的好处在于可以将一组相互关联的变量存储为一组,通过变量名.成员名来访问,避免了变量之间的混淆

其实  结构可以看成是一个轻量级的类

7.我们可以在申明数组后,通过数组下标一个一个的给数组中的数据赋值 如

 int[] age = new int[10];
 age[0] = 10,age[1] = 20

    当然我们也可以在申明的时候直接赋值

      int[] age = new int[10]{1,2,3,4,5,6,7,8,9,10}
   
     或者

      int[] age = new int[]{1,2,3,4,5,6,7,8,9,10}

      在最后一种方法中,我们没有指定数组的长度,系统会根据我们提供的数据来自动判断数组长度。

      除此以外,还有一种定义数组的语法

      int[] age = {1,2,3}

8.[访问修饰符] [static]  返回值类型   方法名(参数列表)
    {
 方法体;
     }

方法名一般使用pascal命名法。

方法的重载: 即方法名相同,参数类型或者参数个数不同,返回值的类型不同并不能构成方法的重载。

9.out  在参数前加一个out修饰符,用于定义一个输出参数,方法在退出前必须对这个参数赋值

          out相对于return的好处在于,可以通过out修饰符让一个方法返回多个值,而不是return的单个

          out修饰的藏书在使用前可以不用初始化。

     ref   在参数前加一个ref修饰符,用于定义一个引用参数,指示传递给方法的是一个引用类型,这和

值传递不同,对引用类型参数的操作会影响实参。

           如public static void methodA ()
 {
  int a = 5
  methodBref a);
 }
 public static void methodB ref int number
 {
  
 }
 methodA调用methodB方法,并将a变量作为一个引用传递给了methodB,那么methodB方法体中队参
数的任何修改都会影响到methodA中变量a的值

        注意 如果在方法的参数定义中使用了outref修饰符,那么调用者在调用方法时,在相应的参数
位置前也要指定修饰符

        params修饰符  支持参数数组,把可变数量的参数作为一个逻辑参数传递给方法。可以理解为这个

修饰符是自动让参数存储在一个不定长的列表里,我们在调用方法时,传递几个参数,编译器自动将这些参

数组装成一个数组,                     
                      console.writeline()方法中就使用了这个参数修饰符

         注意,如果方法的参数列表中使用了这个修饰符,那么这个参数必须放在参数列表中的最后一个。

10.面向对象概念

   三个特性 : 封装,继承,多态

   类 : 类是具有某些共同特征的事物的抽象表示

   对象  :类的实例,即抽象事物的具体化。

   方法: 类能够执行的动作

   字段 :类的状态,是指类的一组相关变量。

11.成员访问级别

   类的字段、属性和方法都叫做类的成员,他们有自己的访问级别,这用来控制类怎样被访问,访问级别

有下列几种

   public  任何地方都可以访问
 
   private  只有定义成员的类可以访问

   protected  只有定义他们的类和子类可以访问

   internal   由当前程序集访问

   类型成员的默认修饰符为private 而类的默认修饰符为internal

12.字段与属性

    为了保护对象的私有数据,字段的访问修饰符为private,那么就只有定义它的类才可以操作这个字段
,如果其他类需要操作这个字段,该怎么办么,这就需要属性了

    属性就是对字段的一种封装,用来保护字段的数据。并且可以对赋给字段的值进行检查,过滤不符合规

范的值

    属性的定义语法

     访问修饰符  数据类型  属性名
 {
  get{ return  字段名;}
  set{ 字段名= value }

 }

      从语法上可以看出,属性可以看成一个拥有两个子方法的方法,只不过在定义方法时需要()来定义参数,而属性不需要。

      通过对属性内部get set方法的访问控制,我们还可以设置只读属性,只写属性。默认情况下,get
set方法的修饰符是继承与属性的访问修饰符

      注意  属性并不存储任何数据,他是通过对字段的访问来达到存数数据和读取数据的目的。故一般情
况下,属性都会和一个字段有个映射关系。所有的数据都是存储在字段中的。

      自动属性:当属性内的getset方法不包含任何检查逻辑,指示简单的给字段赋值和取值,那么可以
使用自动属性来简化代码

  访问修饰符  数据类型  属性名
 {
  get
   set

 }

 使用自动属性时要注意,不能设置只读或只写属性。

13.java应该说调用,而不是重写
类一定有构造器
构造器不能继承
子类构造器中一定调用父类构造器。
*子类构造器 默认调用父类无参数构造器!
*如果父类没有无参数构造器,就必须在子类中明确指定调用
 父类的有参数构造器!

构造函数是类的一个特殊的方法,没有返回值,连void都不用写,在我们使用new关键字来分配对象时
会自动调用。它的作用在于实例化一个类的时候来给对象的各个字段赋初始值。

每个c#类在定义时会有一个默认的无参的构造函数,这个构造函数会对所有字段都赋予一个对应数据类型的默认值。

14.继承的作用在于代码的重用,子类可以除了可以访问定义在基类中可访问的成员外,还可以额外定义自
己特有的成员。如果我们在定义类的时候没有指定父类,那就以为着这个类派生自Object类,Object类是所
有类的基类。

一个基类可以有多个子类,但是一个类只能有一个父类,C#并不支持多重继承,c#通过接口的概念来实现相似的功能

继承中的几个关键字

   this:表示当前对象即自己

   base:表示自己的父类,可以通过base关键字来访问父类中的成员。

   sealed  : 这个关键字指示类不能被继承,即不能派生出其他的子类。c#中的结构就是隐式使用了这个
关键字。

   virtual: (虚方法)使用这个关键字来修饰方法,表示子类可以通过重写这个方法的实现逻辑,这样
就可以实现同一个父类方法在多个子类中的实现逻辑不相同,

   override:  子类在重写父类中用virtual修饰的方法时,必须使用override关键字,指示这个方法时重
写了父类的方法

   as:  用来快速判断某个类型是否和另一个类型相兼容,不兼容则返回一个null

   is: 也用于类型兼容性检测,如果不兼容,则返回一个false

子类和父类的相互转换

   子类可以隐式转换为父类,但是父类不能隐式转换成子类,如果我们需要将一个父类存储到一个子类对

象中,我们必须执行强制转换,强制转换可能失败,会带来异常。所以在强制转换前,必须由程序员来控制

该父类对象是否能转换成一个子类对象。

经典继承 (is-a)关系

 语法  class A class B
 {
  
 }
包含/委托 继承   (has-a)关系

语法  class A
 {
  class B
  {

  }
 }

15.c#中的异常处理机制称为结构化异常处理 SEH   structred exception handing  它的作用在于提供了
一种标准的技术来发送和捕获运行时的异常,并提供给用户比较友好的错误信息。

    c#中异常处理的4个要素

    (1)一个包含异常详细信息的类类型
    (2)一个引发异常类实例的成员
    (3)调用者的一段调用异常类型的代码块
    (4)调用者的一段处理将要发生异常的代码块
16.static的使用需要注意几点

    静态成员只能调用静态成员,不能调用非静态成员。

    非静态成员可以调用静态成员,通过类名.静态成员名来访问,而不能通过对象名.静态成员名来访问。

    静态类是不能实例化的,即不能使用new关键字来分配一个静态类

17.数据绑定的基本步骤

一、定义一个类和相关属性,用来存储我们需要绑定的值

       public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
 public int gender{ get; set; }
   
    } 

 二、new一个类的实例,给需要绑定数据的控件设定DataContext属性

           Person p1 = new Person();//实例化一个类,并给对象属性赋值,
            p1.Name = "AAA";
            p1.Age= 18;
            textBox1.DataContext=p1;//设定控件的数据上下文,
            textBox2.DataContext = p1;//设定控件的数据上下文,

 三、在XAML中给控件使用Text={binding 属性名}的形式来绑定一个数据

       <TextBox Text="{Binding Name}" Name="textBox1" VerticalAlignment="Top" Width="120" />
       <TextBox Text="{Binding Age}"   Name="textBox2" VerticalAlignment="Top" Width="120" />

   这样 ,我们就将person类的两个属性的值绑定到了两个控件上,

18.INotifyPropertyChanged接口的工作就是当我们在后台直接修改对象属性的时候,界面中也会同步更新修改后的属性。

    我们需要注意,当我们要实现这种功能的时候,我们必须使我们的类实现这个接口,即person类的定义必须修改如下

     public class Person : INotifyPropertyChanged //实现INotifyPropertyChanged接口
    {
        private string name;
        private int age;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                this.name = value;
                if ( PropertyChanged!= null )  //判断是否有监听程序
                {
                    PropertyChanged (this,new PropertyChangedEventArgs("Name") );
                }
            }
        }
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                this.age = value;
                if ( PropertyChanged != null )
                {
                    PropertyChanged ( this, new PropertyChangedEventArgs ( "Age" ) );
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

   由于我们需要监听属性的set方法,所以我们不能再使用自动属性了,必须手动的来书写我们的属性set方法,
   if ( PropertyChanged!= null )  //判断是否有监听程序
                {
                    PropertyChanged (this,new PropertyChangedEventArgs("Name") );
                }
这段代码的意义可以理解为,当我们配置了一个监听程序来监听属性是否改变,如果配置了,当属性发生改变时,将通知界面,我的属性已经改变,请及时修改。

19.索引的好处是有可能提高查询效率,但是会占用空间,在insert update时可能降低效率。

            CREATE  INDEX 索引名
            ON 表名 (字段名1[ASC|DESC][, 字段名2 [ASC|DESC], ...])


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值