在很多测试代码中都是在Main函数中写了很多过程来演示我们的功能,但是我们知道我们的程序需要使用类,使用面向对象的方法来进行更好的设计。类是我们开发程序的基础。类作为对象的蓝图,描述了对象的共有属性和功能(方法)。很多教学里边的一个比喻很形象,如果说对象是房子,那类就是设计这个房子的设计图,我们可以使用这一个设计图来建设出很多相同的房子,这就是类和对象的关系。类由属性和方法组成。
Class(类)中可以包含static或者instance的属性和方法。
1.被声明为static型的属性是被所有这个类的对象所共享的,即每个对象中的这个属性都指向同一个值。
2.默认的即instance型的属性是独立于单个对象的,也就是每个对象里的同一个instance属性都可以拥有不同的值。
3.调用被声明为static型的方法不需要使用new关键字来显式的创建一个对象,可以直接由类来调用,一般被声明为static型的方法可以看作是类对外提供的服务。比如Directory.CreateDirectory(); 这个方法用来在我们的计算机中创建文件夹,这个方法就是一个static方法。我们并没有一个已经存在的文件夹供我们操作,我们只是使用了Directory类为我们提供的创建文件夹的服务。另外我们需要注意,因为static方法可以直接由类调用,而且我们在调用static方法的时候并没有创建那些类中定义的instance型的属性,所以我们不能在static方法中使用非static型的属性。
4.默认的instance型的方法必须由具体对象来调用,即必须使用new关键字新建对象后由具体对象来调用。
由下面的代码可以更好理解。
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassesAndObjects
{
class MyCustomer
{
// 客户姓名 instance类型的属性,默认设置"客户姓名"属性为DefaultCustomName的值
private string _CustomerName = DefaultCustomName;
private string _CustomerID; // 客户ID instance属性
public static string DefaultCustomName = "Unknow"; // 默认的客户姓名 static类型的属性
// 类MyCustomer的构造函数,当类被创建时自动调用。与类名同名,不需要定义返回值,可以添加
// 参数,可以提供多个具有不同参数类型或不同参数个数的构造函数,这样当我们
// 新建对象时会根据我们传入参数的类型和个数来决定使用哪个构造函数,即重载。
// 参数,可以提供多个具有不同参数类型或不同参数个数的构造函数,这样当我们
// 新建对象时会根据我们传入参数的类型和个数来决定使用哪个构造函数,即重载。
public MyCustomer(string CustomerID)
{
_CustomerID = CustomerID;
}
// 以下CustomerID和CustomerName可以看到并不是普通的方法,实际上是对我们类的属性_CustomName和
// _CustomID的封装如果我们类的属性可以直接被外界访问并随意设置它的值对我们的程序来说是很
// _CustomID的封装如果我们类的属性可以直接被外界访问并随意设置它的值对我们的程序来说是很
// 危险的。比如使用者把客户的姓名设置成数字"123"很明显,名字是数字是说不通的,所以我们可以使用封装来
// 限制使用者对我们类的属性的操作。封装里包含了get和set两个关键字,对_CustomerID的封装我们只提供了get,
// 这样_CustomerID对外界来说实际上是一个只读属性,CustomerName提供了对_CustomName
// 的最简单的封装,在实际使用中我们可以在set里判断value的值,当value符合一定规则后才赋值给我们
// 的_CustomName属性。
// 的_CustomName属性。
public string CustomerID
{
get { return _CustomerID; }
}
{
get { return _CustomerID; }
}
public string CustomerName
{
get { return _CustomerName; }
set { _CustomerName = value; }
}
{
get { return _CustomerName; }
set { _CustomerName = value; }
}
static void Main(string[] args)
{
MyCustomer custA = new MyCustomer("AAAA"); //创建一个对象,使用了带一个字符串参数的构造函数
MyCustomer custB = new MyCustomer("BBBB");
Console.WriteLine("custA's CustomerID is {0}",custA.CustomerID); // 输出:custA's CustomerID is AAAA
Console.WriteLine("custB's CustomerID is {0}",custB.CustomerID); // 输出:custB's CustomerID is BBBB
// 输出:custA's CustomerName is Unknow
Console.WriteLine("custA's CustomerName is {0}",custA.CustomerName);
// 输出:custB's CustomerName is Unknow
Console.WriteLine("custB's CustomerName is {0}",custB.CustomerName);
Console.WriteLine();
// 对custA对象的_CustomerName属性赋值
custA.CustomerName = "CUSTA'S NAME";
//在这里通过类名来调用更改static型属性DefaultCustomName 的值。
MyCustomer.DefaultCustomName = "Arvin";
// 这次创建的对象的默认客户名字将会是上一行设置的 “Arvin”
MyCustomer custC = new MyCustomer("CCCC");
// 输出:custA's CustomerName is CUSTA'S NAME
Console.WriteLine("custA's CustomerName is {0}",custA.CustomerName);
// 输出:custB's CustomerName is Unknow
Console.WriteLine("custB's CustomerName is {0}",custB.CustomerName);
// 输出:custC's CustomerName is Arvin
Console.WriteLine("custC's CustomerName is {0}",custC.CustomerName);
}
}
}