一、类
1、类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
2、类是对现实生活中一类具有共同特征的事物的抽象。
3、类是模板,确定对象将会拥有的特征(属性)和行为(方法)
二、对象
将类实例化后,成为对象
三、类的构造函数
类的 构造函数 是类的一个特殊的成员函数,当创建类的新对象时执行。
构造函数的名称与类的名称完全相同,它没有任何返回类型。
四、实例
实例1:
创建一个学生类,6个属性,两个方法(了解字段如何通过属性赋值,读值)
class Student
{
private string _name;
public string Name
{
get{return _name;}
set{_name = value;}
}
private char gender;
public char Gender
{
get{return _gender;}
set{_gender = value;}
}
private int _age;
public int Age
{
get{return _age;}
set{_age = value;}
}
private int _chinese;
public int Chinese
{
get{return _chinese;}
set{_chinese = value;}
}
private int _math;
public int Math
{
get{return _math;}
set{_math = value;}
}
private int _english;
public int English
{
get{return _english;}
set{_english = value;}
}
public void Say()
{
Console.WriteLine("我叫{0},今年{1}岁了,是{2}生", this.Name, this.Age, this.Gender);
}
public void Score()
{
Console.WriteLine("我叫{0},总成绩为{1},平均成绩为{2}", this.Name, (Chinese + Math + English), (Chinese + Math + English)/3);
}
}
调取类中的属性和方法(较复杂)
static void Main(string[] args)
{
Student zsStu = new Student();
zsStu.Name = "张三";
zsStu.Age = 18;
zsStu.Gender = '男';
zsStu.Chinese = 90;
zsStu.Math = 06;
zsStu.English = 89;
zsStu.Say();
zsStu.Score();
Console.WriteLine("===============================");//华丽的分割线
Student xlStu = new Student();
xlStu.Name = "小兰";
xlStu.Age = 17;
xlStu.Gender = '女';
xlStu.Chinese = 78;
xlStu.Math = 88;
xlStu.English = 55;
xlStu.Say();
xlStu.Score();
Console.ReadKey();
}
实例2:利用构造函数给里面的字段进行赋值
Person 类
public class Person
{
public Person(string name,char gender,int age)
{
this._name = name;//this 是指示代词,当前字段
this._gender = gender;
this._age = age;
}
private string _name;
public string Name
{
get {return _name;}
}
private char _gender;
public char Gender
{
get {return _gender;}
}
private int age;
public int Age
{
get {return _age;}
}
public void Show()
{
Console.WriteLine("{0}岁的{1}在大米时代是最最可爱的{2}同学");
}
}
主函数的调用
static void Main(string[] args)
{
Person per = new Person("张三",'男',18);//利用构造函数给里面的字段进行赋值
per.Show();
Console.ReadKey();
}
显然,相比于实例1 的主函数,实例2利用构造函数后,就精简多了
实例3:车票练习
创建ticket类
public class Ticket //字段为只读的前提下,如何向字段赋值,可使用构造函数进行赋值
{
public Ticket(int distance) //建立一个构造函数:因为是方法名与类名相同
{
if(distance<0)
{
distance = 0;
}
this._distance = distance;//将Ticket构造函数传递过来的参数值distance赋值给本类中的_distance字段
}
int _distance; //声明一个_distance字段,默认修饰符为private私有的
public int Distance //声明一个公共的Distance属性,用来向字段_distance传值的
{
get {return _distance;}
}
double _price;
public double Price
{
get //读值
{
if(_distance<=100)
{
return _distance * 1.0; //返回字段_distance的值
}
else if (_distance<=200)
{
return _distance * 0.95;
}
else if (_distance<=300)
{
return _distance * 0.9;
}
else
{
return _distance * 0.8;
}
}
}
public void Show()
{
Console.WriteLine("{0}公里的价格为{1}",this.Distance,this.Price);
}
}
主函数调用
static void Main(string[] args)
{
Ticket t = new Ticket(890); //实例化Ticket类,创建一个tick的对象,并向对象的属性赋值
t.Show();
Console.ReadKey();
}
五、命名空间
1、用途:namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”
-
如果代码和被使用的类在一个namespace则不需要using
-
如果在不同命名空间下的类调用有两种方法
- 写全称 命名空间.类名
- 先using引用命名空间,再调用
using 关键字表明程序使用的是给定命名空间中的名称。例如,我们在程序中使用 System 命名空间,其中定义了类 Console。我们可以只写:
Console.WriteLine ("Hello there");
我们可以写完全限定名称,如下:
System.Console.WriteLine("Hello there");
实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using _01面向对象;//需要先添加引用,再通过写using导入命名空间
using System.Threading.Tasks;
namespace _08命名空间
{
class Program
{
static void Main(string[] args)
{
//01面向对象.Person p = new _01面向对象.Person(); //第二种方式,写全称,需要添加引用,无需写using
Person p = new PErson();
p.Name = "张三";
p.Walk();
Console.ReadKey();
}
}
}
六、字符串转字符
复杂方法
string text = "很有意思呐"; //定义一个变量并向其赋值
Console.WriteLIne(text.Length); //在控制台太写入文本长度
char[] chs = new char[text.Length]; //声明一个变量为chs的char数组变量,长度为字符串文本长度
for(int i = 0; i < text.Length;i++) // for循环,循环次数为文本的长度
{
chs[i] = text[i]; //将字符串的内容逐一赋值给字符数
}
chs[0] = '超';
for (int i = 0; i < chs.Length; i++) //for循环,循环次数为chs字符数组的长度
{
Console.WriteLine(chs[i]); //在控制台上逐一写入字符数组的内容
}
Console.ReadKey();
精简
string text = "很有意思呐";
char[] chs = text.ToCharArray();//调用转换为字符方法ToCharArray(),将字符串转换为字符,并赋值给字符变量
chs[0] = '超';//改值,修改第一个字符值
text = new String(chs);//变成新的字符串
Console.WriteLine(text);
Console.ReadKey();