标签:
——类
类就是个模子,确定了对象应该具有的属性和方法。
我们把具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念。
对象是根据类创建出来的。
抽象一点来说,类就是一个盖大楼的图纸 ; 对象 就是盖出来的大楼,根据这个图纸可以盖出很多大楼,但是这些大楼的结构都一样
语法:
[public] class 类名
{
字段;
属性;
方法;
}
定义类的例子
public class Person {
private string _name;
//字段
public string Name
{
get { return _name; }
set { _name = value; }
}
//属性
public void SayHi() {
Console.WriteLine("我叫{0}",Name);
}
//方法
}
写好了一个类之后,我们需要创建这个类的对象,
那么,我们管创建这个类的对象过程称之为类的实例化。
使用关键字 new.
//以上面的Person类为例子进行实例化
Person P1 = new Person();//创建实例对象
P1.Name = "HelloWorld";
//当我们创建好一个类的对象后,需要给这个对象的每个属性去赋值。我们管这个过程称之为对象的初始化。
P1.SayHi();//调用对象的方法
上面就是定义了一个简单的类,然后实例化,然后初始化赋值,最后调用方法的全过程
非静态类是不占内存的,而对象是占内存的。
——类的属性
——类成员的访问修饰符
——静态和非静态的区别
用关键字static修饰的就是静态,没有static修饰的就是非静态
- 在非静态类中,既可以有实例成员,也可以有静态成员
- 在调用实例成员(非静态成员)的时候,需要使用对象名.实例成员;
- 在调用静态成员的时候,需要使用类名.静态成员名;
-静态类中只能有静态成员,因为静态类不能被实例化,所以就算在静态类中定义了实例成员,也没有办法访问到
总结一下:
那么什么时候使用静态类呢?
//定义一个非静态类
public class Person
{
private static string _name;//静态字段
public static string Name//静态属性
{
get { return Person._name; }
set { Person._name = value; }
}
private char _gender;//实例字段
public char Gender//实例属性
{
get { return _gender; }
set { _gender = value; }
}
public void M1()
{
Console.WriteLine("我是非静态的方法");
}//实例方法
public static void M2()
{
Console.WriteLine("我是一个静态方法");
}//静态方法
}
//在Main方法中调用
static void Main(string[] args){
Person P1 = new Person();
P1.Gender = ‘男‘;//给实例属性赋值
Person.Name = "HelloWorld";//给静态属性赋值
P1.M1();//调用实例方法
Person.M2();//调用静态方法
}
//定义一个静态类
public static class Student
{
private static string _name;
public static string Name
{
get { return Student._name; }
set { Student._name = value; }
}
public static void M1()
{
Console.WriteLine("Hello World");
}
}
//在Mian方法中调用
static void Main(string[] args){
Student.Name = "Hello";给静态属性赋值
Student.M1()//调用静态方法
}
上面两个例子中卫对象初始化都是在给属性赋值,把字段定义为了private,目的也是为了保护字段数据。
——构造函数
在上面的例子中会发现每实例化一个对象,就需要对属性赋值进行初始化,就像下面这样
static void Main(string[] args){
Person P1 = new Person();
P1.Gender = ‘男‘;
Person P2 = new Person();
P2.Gender = ‘女‘;
Person P3 = new Person();
P3.Gender = ‘男‘;
}
//这里实例了三个对象,就为属性赋值了三次,造成了大量的冗余代码,所以就有了构造函数
作用:帮助我们初始化对象(给对象的每个属性依次的赋值)
构造函数是一个特殊的方法:
构造函数的名称必须跟类名一样。
构造函数的例子
public class Person{
//定义一个构造函数
public Person(string name){
this.Name = name;
}
private string _name;
public string Name(){
get{return value;}
set{_name= value;}
}
}
//在Main方法中实例化
void static Main(string[] args){
Person p1 = new Person("HelloWorld")
}
new帮助我们做了4件事儿:
类当中会有一个默认的无参数的构造函数,当你写一个新的构造函数之后,不管是有参数的还是无参数的,那个默认的无参数的构造函数都被干掉了,这个重点体现在继承那里,没有继承也就无所谓了
this关键字
1)、代表当前类的对象
2)、在类当中显示的调用本类的构造函数,构造函数是可以有重载的。
public class Person{
//定义一个构造函数
public Person(string name,string gender){
this.Name = name;
this.Gernder = gender
}
//一个参数的构造函数,构成重载,如果只给姓名,性别默认为男
public Person(string name):this(name,"男"){
}
private string _name;
public string Name(){
get{return value;}
set{_name= value;}
}
private string _gender;
public string Gender(){
get{return value;}
set{_gender= value;}
}
}
标签:
原文地址:http://blog.csdn.net/nextstand/article/details/51351429