C# 面向对象2 (类的语法)
1.类
语法:
[public] class 类名
{
字段;
属性;
方法;
}
**类名首字母必须大写
2.创建对象
创建这个类的对象过程称之为类的实例化,关键字:new
this:表示当前这个类的对象.
类是不占内存的,而对象是占内存的!(因为创建完对象后,对象的字段就会被初始化,有了初始值)
创建一个Person类:创建了字段(存取数据)和方法(对象的行为)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 面向对象01 { public class Person { //字段 public string _name; public int _age; public char _gender; public void CHLSS() { //this关键字:表示当前这个类的对象 Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生,我可以吃喝拉撒睡~~",this._name,this._age,this._gender); } } }
main函数:创建对象,并赋值字段
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 面向对象01 { class Program { static void Main(string[] args) { //创建Person类的对象 new关键字 Person suQuan = new Person();//自定义类 Person,系统的类 suQuan._name = "孙权"; suQuan._age = 23; suQuan._gender='男'; suQuan.CHLSS(); Console.ReadKey(); } } }
**结构与类的区别:结构不具备类的特征:封装,继承和多态.
3. 属性
属性的作用就是保护字段,对字段的赋值和取值进行限定.
属性的本质就是两个方法,get和set 方法
既有get()也有set()方法,我们称之为可读可写属性.
只有get()没有set(),我们称之为只读属性.
没有get()只有set(),我们称之为只写属性.
**reflector.exe 微软反编译器的使用
**Fields,Methods,Property
***字段就是女人,属性才是男人. 男人保护女人的!
**set 和get方法的原型
//在反编译器中查看 get set //set方法的原型 public void set_Name(string value) { this._name = value; } //get方法的原型 public string get_Name() { return this._name; }
**字段在类中必须是私有的,只能通过属性来访问
set方法在赋值的时候调用,value值的判断
get方法在取值的时候调用,对字段值的判断
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 面向对象01 { public class Person { //字段,存数据 private string _name; public string Name { //当你输出属性值的时候,会执行get方法 get { return _name; } //当你给属性赋值的时候,首先会执行set方法 set { _name = value; } } //在反编译器中查看 get set //set方法的原型 //public void set_Name(string value) //{ // this._name = value; //} //get方法的原型 //public string get_Name() //{ // return this._name; //} private int _age; public int Age { get { return _age; } //对Age属性 赋值的时候调用! set { if (value < 0 || value > 100) value = 0; _age = value; } } private char _gender; public char Gender { //对Gender属性 取值的时候调用! get { if (_gender != '男' && _gender != '女') return _gender = '男'; return _gender; } set { _gender = value; } } //方法:对象的行为 public void CHLSS() { //this关键字:表示当前这个类的对象 Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生,我可以吃喝拉撒睡~~",this.Name,this.Age,this.Gender); } } }
4.访问修饰符
public:公开的公共的,在哪都能访问
private:私有的,只能在当前类的内部进行访问,除了这个类就访问不到了. 默认private
5.创建对象的正确方法
1.类中的字段是private的,属性是public的
2.创建对象时只能对属性访问和赋值,(由属性做处理,在给字段)
所以之前的第二点的方法是不对,以下才行
main方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 面向对象01 { class Program { static void Main(string[] args) { //创建Person类的对象 new关键字 Person suQuan = new Person();//自定义类 Person,系统的类 suQuan.Name = "孙权"; suQuan.Age = -23; suQuan.Gender='春'; suQuan.CHLSS(); Console.ReadKey(); } } }
Person类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 面向对象01 { public class Person { //字段,存数据 private string _name; public string Name { //当你输出属性值的时候,会执行get方法 get { return _name; } //当你给属性赋值的时候,首先会执行set方法 set { _name = value; } } //在反编译器中查看 get set //set方法的原型 //public void set_Name(string value) //{ // this._name = value; //} //get方法的原型 //public string get_Name() //{ // return this._name; //} private int _age; public int Age { get { return _age; } //对Age属性 赋值的时候调用! set { if (value < 0 || value > 100) value = 0; _age = value; } } private char _gender; public char Gender { //对Gender属性 取值的时候调用! get { if (_gender != '男' && _gender != '女') return _gender = '男'; return _gender; } set { _gender = value; } } //方法:对象的行为 public void CHLSS() { //this关键字:表示当前这个类的对象 Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生,我可以吃喝拉撒睡~~",this.Name,this.Age,this.Gender); } } }
6.对象的初始化
当我们创建好一个类的对象后,需要给这个对象的每个属性去赋值.
You are never too old to set another goal or to dream a new dream!!!