using System;
namespace _20200406
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
/*类和对象
* 面向对象:一种软件开发的思想,指导程序员如何分析、解决问题。
* 类是一个抽象的概念,即为生活中的‘类别’。class
* 对象是类的具体实例,即归属于某个类别的的‘个体’
* 例如:学生是一个类,表示一种类型。‘八戒同学’就是一个对象
* 名词类型的共性,作为数据成员
* 动词类型的共性,作为方法成员
* 创建类
* 语法:
* 访问界别 class 类名(大写首字母)
* {
* 类成员。。。。
* }
* 通常每个类都在一个独立的C#源文件中
* 创建新的类意味着在当前项目中产生了一种新的数据类型,类似enum也是数据类型
* 类是什么类型?引用类型
*
* 创建对象
* 语法:
* 类名 引用名;
* 引用名 = new 构造函数(参数列表);
* 创建对象的过程也称为“实例化”
*/
//声明Wife类型的引用,存的是谁谁的引用
Wife wife01;//下面行设置断点,会发现此时wife01 是空,数据成员都是空
//指向Wife类型的对象(实例化Wife类型对象),在堆上,创建多大的内存空间,取决于数据成员有多少
wife01 = new Wife();
wife01.SetName("米兰达");//下面行设置断点,才是wife01有了具体的地址,但是数据成员还是空
wife01.SetAge(18);//开始设置成员数据,name和age中实际存储的是数据的引用,数据也在堆上
//注意存的是引用,引用指向数据,存的永远都是引用
//反过来理解就很好理解了,因为声明的时候不知道最终存储数据的大小,所以具体数据是另外存储在一个地方
Wife wife02 = wife01;
wife02.SetName("安吉丽娜");
Console.WriteLine(wife01.GetName());
Console.WriteLine( wife01.GetAge());
Console.ReadLine();
/*
* 成员变量
* 定义在类中-方法外的变量,因为是属于类的成员
* 特点:
* --具有默认值
* --所在类被实例化后,存在堆中,对象被回收时,成员变量从堆中清除。
* --可以与局部变量重名
*
*/
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace _20200406
{
class Wife
{
//数据成员
private string name;
private string sex;
private int age;
//方法成员
public void SetName(string name)
{
//this 这个对象(引用)
//this 关键字可以直接找到这个类的成员变量
this.name = name;
}
public string GetName()
{
return this.name;
}
public void SetAge(int age)
{
this.age = age;
}
public int GetAge()
{
return this.age;
}
}
}