CHAPTER3 Types,Objects,and Namespaces
The Basics About Classes
类之间是依据三个重要的因素相互联系的.
属性:你可以通过属性访问一个类的数据,有些数据是只读的,有些则是可读写的.
方法:方法是对类的操作,与属性不同的是,方法产生的一系列动作会改变类的状态。
事件:事件则是,当某个动作发生或某个属性改变的时候,对应的操作.
除此之外,类有着他自己私有的数据,以及外部可以访问的数据,类看上去就象是一个黑盒,你只需要知道怎么使用他,而不需要知道他是怎么工作的,但你必须得知道类中的属性,事件,及方法,这些就是组成类的成员.
Static Members
DateTime myDate = DateTime.Now;//定义一个DateTime对象,并将现在的系统时间赋值给他.
myDate = myDate.AddDays(1);//在对这个对象进行修改时,必须使用对象的名字,因为AddDays()是instance方法.
myDate = DateTime.AddDays(1);//这样写是无意义的,AddDays()是无法用static方法进行调用的.
在前面所讲到的MATH类的方法中有些是static有些是instance.例如Math.Sqrt(81)是static.
A Simple Class
类的定义有着自己的结构.如
public class MyClass
{
//类的代码.
}
Building a Basic Class
public class Product
{
private string name;
private decimal price;
private string imageUrl;
}//定义了一个类,这个类中用来存放产品的名字,价格,以及图片的Url地址.
建立类,类成员需要用到的关键字,public能够被任何的类访问,private只能被自己的类访问,internal只能被此程序的所有的代码访问,protected只能被自己的类或者继承此类的类访问,protected internal只能被此程序访问或继承他的类访问.(这里关于这几个关键字写的不是很清楚,建议大家看看VC++的书籍,和这是一模一样的,这里一定理解清楚,不然以后对类里面属性的访问会存在很多问题.)
Creating a Live Object
书中所举例子中加入了最后一行,saleProduct =null;的作用是清楚内存中的内容,而实际上此行是不需要的,因为当程序运行完了之后,垃圾回收运行机制就会启动,会自动执行与此行相同的功能.
Adding Properties
在添加属性之前,是无法使用类他的,上面的代码虽然已经添加了,但VS2005中可以看到他们是在field里面的,如果要使用他们还需要进行如下操作.
public class Product
{
private string name;
private decimal price;
private string imageUrl;
public string name
{
get
{ return name; }
set
{ name = value;}
}
public decimal price
{
get
{ return price; }
set
{ price = value; }
}
public string imageUrl
{
get
{ return imageUrl; }
set
{ imageUrl = value; }
}
}
现在如果你建立Product的对象的话,可以使用saleProduct.name = "Kitch Carbage";语句了,哇塞,示例代码中一个厨房用的垃圾桶要50刀,我可买不起啊.400RMB,可真够贵的,资本主义的垃圾桶都比社会主义国家的垃圾桶要好,天理何在啊.
Adding a Basic Method
这个是要我们来构建一个函数,他有许多效用.
public class Product
{
.............
public string GetHtml()
{
string htmlString;
htmlString = "<h1>" + name + "</h1><br />";
htmlString += "<h3>Costs:" + price.ToString() + "</h3><br />";
htmlString += "<image src=" + imageUrl + ">";
return htmlString;
}
}
Adding a Constructor
建立一个初始化函数,当建立类的对象的时候,可以对对象进行实例化,还有其他的作用哦.如果你不建立初始化函数,那么.NET会自动建立一个什么都不干的初始化函数.
public class Product
{
.............
public string GetHtml()
{
string htmlString;
htmlString = "<h1>" + name + "</h1><br />";
htmlString += "<h3>Costs:" + price.ToString() + "</h3><br />";
htmlString += "<image src=" + imageUrl + ">";
return htmlString;
}
public Product(string name,decimal price)
{
this.name = name;
this.price = price;
}//初始化的时候要调用两个参数,将这两个参数分别赋值给自己类的成员name 和 price.
}
Adding a Basic Event
此处关于在类中建立响应事件,由于没有很好的例子,很难理解,也很难记住这个.不过我找到了 http://www.yesky.com/SoftChannel/72342380468109312/20040220/1770096.shtml 这里面对事件的使用有比较详细的讲解,但是要真正的去理解事件机制,还是需要自己动手和自己去看源代码才行.
Testing the Product Class
测试这个网页,在CHAPTER3的文件夹中,我发现添加域的同时还可以添加属性,可以让他们之间相互关联,这要慢慢的体会了.本人测试通过,全部手写,也完全理解了,建立类,定义类的域,定义类的属性,建立构造函数,在类中添加函数,现在发现类真的很秒.奇妙.