1、简述public、private、internal、protected、protected internal的区别

public:没有限制,任何地方均可访问

private:私有的,当前类的内部可以访问,其他类不可以访问。类成员的默认修饰符。

internal:当前程序集可访问。类的默认修饰符。

protected:受保护的,当前类内部和继承类可以访问

protected internal:兼具protected和internal的特性,当前类内部、继承类、当前程序集可以访问。      

protected和internal访问修饰符无所谓哪个更“可访问”,因为判断标准不一样。

protected只看是否是当前类内部或者所有子类内部,与是否在同 一个程序集无关。

internal只看是否在一个程序集内,与其是否有继承关系无关。

2、MVC机制

3、面向对象概念

面向对象思想:找个对象帮你做事儿

面向对象:意在写出一个通用的代码,屏蔽差异

对象是被动的那个,是看的见摸得着的。

电脑不是对象,桌上的电脑是对象

对象是根据类创造出来的,比如:人是类,张三这个人事对象

               电脑是类,桌上的电脑是对象

可以看出类和对象是包含关系。

4、类

[public] class 类名
{
    字段;
    属性;
    方法;  
}

写好一个类之后,我们需要创建这个类的对象,那么,创建这个类的对象过程称之为类的实例化。

使用关键字 new。

创建类:Person

public class Person
{
      public int _age;
      public char _gender;
      public string _name;

      public void CHLSS()
      {
           Console.WriteLine("我是{0},我今年{1}岁了,我是{2}生,我会吃喝拉撒睡哟~",this._name,this._age,this._gender);
       }
}

 创建对象,访问对象里面的字段和方法

public static void Main(string[] args)
{
      //类是不占内存的,对象是占内存的
      Person sunQuan = new Person();
      sunQuan._name = "孙权";
      sunQuan._gender = '';
      sunQuan._age = 18;

      sunQuan.CHLSS();
      Console.ReadKey();
}

输出结果

5、Filed字段    Property属性   Method方法

6、属性

属性的作用就是保护字段、对字段的赋值和取值进行限定。

属性的本质就是两个方法,一个叫get(),一个叫set()。

所以一般字段是private的,属性是public的。

既有get()也有set()为可读可写属性;只有get()没有set()为只读属性;没有get()只有set()为只写属性。

以下是对第4条中代码的优化

public class Person
{
     private int _age;
     public int Age
     {
         get { return _age; }
         set
         {
              if (value < 0 || value > 100)
              {
                  value = 0;
               }
               _age = value;
           }
       }

       private char _gender;
       public char Gender
       {
            get
            {
                if (_gender != '' && _gender != '')
                {
                    _gender = '';
                }
                return _gender;
            }
            set { _gender = value; }
       }

       private string _name;
       public string Name
       {
           get { return _name; }
           set { _name = value; }
       }

       public void CHLSS()
       {
           Console.WriteLine("我是{0},我今年{1}岁了,我是{2}生,我会吃喝拉撒睡哟~", this.Name, this.Age, this.Gender);
       }
}

       main方法调用

public static void Main(string[] args)
{
        //类是不占内存的,对象是占内存的
        Person sunQuan = new Person();
        sunQuan.Name = "孙权";
        sunQuan.Gender = '';
        sunQuan.Age = -18;//-18是错误数据,在属性的set方法中处理为0

        sunQuan.CHLSS();
        Console.ReadKey();
}

 get(),set()方法本质,用Reflector反编译可看出其本质

public void set_Name(string value)
{
       this._name = value;
}

public string get_Name()
{
       return this._name;
}

6、静态和非静态的区别

关键字:static

实例成员:类中的成员

1)、在非静态类中,既可以有实例成员,也可以有静态成员;

       在静态类中,只可以有静态成员。

2)、在调用实例成员的时候,对象名.实例成员;

       在调用静态成员的时候,类名.静态成员。

3)、静态函数(方法)中,只能访问静态成员,不允许访问实例成员;

      实例函数(方法)中,既可以使用静态成员,也可以使用实例成员。

4)、前面说到类是不占内存的,对象是占内存的。

       静态类不一样,静态类本身是占内存的,只有程序全部结束之后,静态类才会释放资源,所以静态类在一个项目中不需要太多。

       释放资源:GC(Garbage Collection垃圾回收器);不是所有的都会自己回收释放资源,如文件流就需要手动回收。

5)、内存常用三块:栈  堆  静态存储区域(静态类存储的地方)

5)、什么时候用静态:工具类

7、

8、

 

posted on 2017-08-25 17:12  Lacey.zhao  阅读(135)  评论(0编辑  收藏  举报