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、