4.4 对象
知识点讲解:光盘:视频\PPT讲解(知识点)\第4章\对象.mp4
在C#程序中,类必须使用对象来实现某些功能,对象就相当于类的工具。在本节的内容中,将详细讲解对象的基本知识。
4.4.1 创建对象
C#中的类是抽象的,要使用类来实现特定的功能,必须先将类实例化,即创建类的对象后才能使用。类与对象的关系可以比喻为机型设计和具体的机器,类是一系列属性和功能的描述,而对象就像根据类的描述而设计出的具体处理程序。
在C#中为类创建对象的具体格式如下:
类名 对象名= new 类名 (参数);
其中,参数是可选的。
4.4.2 使用对象
在C#中,对象使用点运算符“.”来引用类的成员,并且引用的范围受到成员的访问修饰符的限制。
实例008 根据用户的姓名输出对应的QQ名
源码路径 光盘\daima\1\4\2 视频路径 光盘\视频\实例\第4章\008
实例文件duixiang.cs的具体实现代码如下。
namespace duixiang
{
class QQming
{
public string name;
public void Bark()
{
Console.WriteLine("落雪飞花!");
}
}
class DQQming
{
public static void Main()
{
QQming mm = new QQming();
mm.name = "张三";
QQming nn = new QQming();
nn.name = "张三";
Console.WriteLine("对象mm的名字为“{0}”,QQ名是:", mm.name);
mm.Bark();
Console.WriteLine("对象nn的名字为“{0}”,QQ名是:", nn.name);
nn.Bark();
if (mm == nn)
{
Console.WriteLine("-> mm与nn是同一个对象。");
Console.ReadKey();
}
else
{
Console.WriteLine("-> mm与nn不是同一个对象。");
Console.ReadKey();
}
}
}
}
范例015:字符串比较
源码路径:光盘\演练范例\015视频路径:光盘\演练范例\015范例016:定位子字符串
源码路径:光盘\演练范例\016视频路径:光盘\演练范例\016\
上述实例代码的设计过程如下。
(1)分别定义类QQming和DQQming。
(2)在类QQming内定义函数Bark,用于输出用户的QQ名。
(3)在类DQQming内创建类QQming的对象,并分别调用QQming的成员。
(4)分别设置两个用户名,并将对应的名字和QQ名通过WriteLine输出。
(5)根据用户名判断是否为同一个用户对象,并将判断结果输出。
执行后将显示对应的用户名和QQ名,并显示是否为同一个用户对象的判断结果。如图4-3所示。
图4-3 实例执行结果
在上述代码中,虽然两用户的名字相同,都是“张三”,但他们并不是同一个人。在C#对象中,如果将一个对象赋值给另一个对象,那么这两个对象就是相同的,代表它们的变量都将存同一地址。如果改变其中一个对象内成员的状态,则也会影响另一个对象内成员的状态。
对上述实例进行修改,尝试改变上述对象成员的状态,并查看对应的结果。具体代码如下。
namespace duixiang1
{
class mm
{
public string name;
public void Bark()
{
Console.WriteLine("落雪飞花!");
}
}
class nn
{
public static void Main()
{
mm aa = new mm();
aa.name = "张三";
mm dd = new mm();
dd = aa;
if (aa == dd)
{
Console.WriteLine("aa与bb是同一个人。");
}
else
{
Console.WriteLine("aa与bb不是同一个人。");
}
Console.WriteLine("aa的名字为“{0}”,QQ名为:", aa.name);
aa.Bark();
Console.WriteLine("dd的名字为“{0}”,QQ名为:", dd.name);
dd.Bark();
dd.name = "李四";
Console.WriteLine("改变dd的名字为“{0}”", dd.name);
Console.WriteLine("aa的名字也会改变为“{0}”", aa.name);
Console.ReadKey();
}
}
}
上述代码执行后,会显示对应的用户名和QQ名,并显示用户名修改后的处理结果,如图4-4所示。
图4-4 实例执行结果
从图4-4所示的执行结果可以看出,如果修改了对象dd的值,对应的对象aa的值也会修改。这是因为aa和dd是同一个用户。