.Net学习笔记-.Net基础2 C#面向对象基础1 类和属性

来源:互联网 发布:ffmpeg nginx rtsp hls 编辑:程序博客网 时间:2024/06/05 03:25
1.面向对象概念
1).面向对象编程(OOP,Object Oriented Programming)是相对于面向过程编程说的,
之前我们写的代码基本都是纯的面向过程编程的,当项目复杂了,纯面向过程代码
实现会很复杂,面向对象可以简化代码的结构和组织关系。面向对象不是替代面向
过程的,宏观是面向对象,微观仍然是面向过程。
2).类(Class)和对象(Object):人、王力宏。
3).面向对象三大特征:封装、继承、多态。
2.类的定义
1、最简单的类:class Person{} 
Person wlh=new Person();//创建Person类的对象,然后把Person类型变量wlh指向这个对象
3.增加类变量(字段)和方法:
class Person
{
//字段用来描述类内部的信息(不同类的对象所不同)
private int age;
private string name;
//方法是类的“行为”
//接受外界设定的“年龄”
public void SetAge(int age)
{
this.age = age;
}
public int GetAge(int age)

{

return this.age;

}
//接受外界设定的“名字”
public void SetName(string name)
{
this.name = name;
}
//获得“年龄”值的方法
public string GetName(string name)
{
return this.name;
}
public void SayHello()
{
Console.WriteLine("我是"+this.name+",我的年龄是"+this.age+"岁");
}
}
类的实例化
Person wlh = new Person();
            //创建Person类的对象,然后把Person类型变量wlh指向这个对象
            wlh.SetAge(30);//调用wlh变量当前所指向的对象的SetAge方法
            wlh.SetName("王力宏");
            wlh.SayHello();
            Person lzy = new Person();
            lzy.SetName("林志颖");
            lzy.SetAge(80);
            lzy.SayHello();
            //每new一次就创建类的一个“实例”“对象”
            //两个对象之间的内存是独立的,每人一块
            Console.ReadKey();
new出的每个对象都是一个单独的实例,两个对象之间的成员变量是独立的两份。
new出来的叫类对象或者实例(Instance)。
4.类对象是引用传递
Person weiren = wlh;// weiren指向yzk当前所指向的对象
weiren.SetAge(22);//调用weiren所指向对象的SetAge方法
weiren.SayHello();
wlh.SayHello();
解释:“Person weiren = yzk;”weiren指向yzk当前所指向的对象。
只有new才会创建新的对象,有多少new就有多少对象。
Person wlh= new person();
wlh.SetAge(50);//不会改变weiren所指向对象的age值
把对象传递进方法中,传递的也是同一份引用:
public void Test(Person p)
        {
            p.setAge(p.getAge() + 5);
        }
Person p = new Person();
            p.setAge(30);
            Test(p);
            p.sayhello();

执行结果是35岁

5.null
null表示变量没有指向任何对象
Person p1=null;//声明变量p1,不指向任何对象
//p1.SayHello();//调用p1所指向对象的SayHello方法
对于一个为null的变量调用成员方法都会报异常NullReferenceException。
值类型(ValueType):数值类型(int、long、double等)、boolean等
基本类型,枚举、结构体。
值类型是复制传递,不能为null。
String不是值类型。string s=null;//声明字符串变量s,不指向任何对象
成员变量和局部变量:
成员变量(全局变量):定义在类中
局部变量:定义在方法中
局部变量必须初始化,成员变量声明时默认初始化,基本数值类型默认
初始值为int,String等非基本类型初始化为null。
this:当成员变量和局部变量(函数参数也可以看做局部变量)重名的时候,
被看做局部变量,因此为了避免混乱,建议访问成员变量的时候加上“this.”,
this代表当前对象。
new Person().sayHello();创建一个匿名对象:成员变量默认初始化了,Age=0 Name=null
6.public与private
public成员可以被类内部或者外部访问,
private成员只能被类内部访问。
这样可以保护不希望外接调用的内部成员(Member,包含字段Field/变量、方法)不被外界访问。
字段(Field)/成员变量(Member Variable)一般声明为private。通过get/set方法来进行取值/赋值。
通过SetAge方法来设置age的好处:可以控制参数的合法性
可以实现:只读、只写
7.属性(property)
为了避免外界给成员变量随便赋值,必须把成员变量声明为private,然后提供get/set方法,写起来、调用起来都麻烦,C#提供了“属性”这样一个语法:
private int height;
public int Height
{
get
{
return this.height;
}
set
{
this.height = value;
}
}
p.Height=50;int a = p.Height; 
属性本质上就是一个私有的成员变量和get、set两个方法组成的
只写get:只读,只写set:只写
简化属性写法:如果是简单set/get逻辑,可以使用更简写的语法: 
public int Weight 
get;
set; 
通过反编译器可看出编译器会自动创建类似 private int weight;自动封装get{return weight};set{this.weight=Value};
属性就是对成员变量的封装。

get、set可以有一个声明为private、protected,这样就可以设置不同的访问级别。

如果只有get或者set就是只读或只写属性。只读只写不能简化写。不能只有set,必须要有get



原创粉丝点击