---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一、 类
1、 类的定义
C#使用class关键字来定义类
语法:
[访问修饰符]class 类名
{
数据成员;
函数成员;
}
在C#中,访问修饰符有四种:
public:可以在程序的任何地方访问
internal:只能在本项目中被访问。
private:只能在本类中被访问
protected:只能在本类或子类中被访问
在类这个级别,定义类时不指定访问修饰符的情况下,默认为internal;
而在类中定义变量或方法时不指定访问修饰符,那么默认为private。
下面定义一个名叫Person的类,Person类包含两个数据成员和一个成员方法:
public class Person
{
public string name;
public int age;
public Person() { }//无参构造函数
public Person(string Name,int Age)//有参构造函数
{
this.name = Name;
this.age = Age;
}
public void Hello(string Name, int Age)
{
Console.WriteLine("Hello,我叫{0},今年{1}岁了!", Name, Age);
}
}
class Program
{
static void Main(string[] args)
{
Person onePerson = new Person("张三",30);
onePerson.Hello();
Console.ReadKey();
}
}
输出:
2、 类的实例化
定义好一个类之后,需要创建类的对象才能使用,通过类产生一个对象的过程,就叫类的实例化。C#中我们使用new关键字来创建类的实例(也叫做对象)。
实例化类的语法:
类名对象名 = new 类名();
如: Person lisi = new Person();
3、 加与不加static的区别
1) 不加static的方法又叫做实例方法,在调用之前必须先对类进行实例化,也就是创建一个类的对象,然后通过实例名.方法名 来访问。
2) 加了static的方法叫静态方法,它是属于类本身的而不是属于类的对象的,调用的时候不需要对类进行实例化,也就是说不需要创建类的实例,直接通过类名.方法名 来调用。
3) 使用原则:
静态方法只能访问类的静态变量,不能访问类的非静态变量;
静态方法只能使用类名来调用,不能使用实例来调用。
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
非静态方法必须通过类的实例来调用。
例: static void Main(string[] args)
{
Test.CNGreet();//通过“类名.方法名”来调用静态方法
Test instance=newTest();//创建类的一个对象instance
instance.EnglishGreet();//通过“实例名.方法名”来调用非静态方法
Console.ReadKey();
}
class Test
{
static string Sname="Jack";//静态变量
string name="Lily";//非静态变量
///<summary>
///非静态方法EnglishGreet()
///</summary>
public void EnglishGreet()
{
//非静态方法即可以访问静态成员又可以访问非静态成员
Console.WriteLine("How are you ?{0} , {1}", Sname, name);
}
///<summary>
///静态方法CNGreet()
///</summary>
public static void CNGreet()
{
//静态方法只能访问静态方法
Console.WriteLine("你好呀?,{0}!", Sname);
}
}
输出:
二、 构造函数
C#中的构造函数是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化。
C#中的构造函数有以下主要特点:
(1) C#构造函数的名字必须与类名相同;
(2) C#构造函数没有返回类型,它可以带参数也可以不带参数;
(3) C#构造函数主要作用是完成对类的初始化的工作;
(4) 在创建一个类的新对象(使用new关键字)时,系统会自动调用构造函数初始化新对象;
(5) 当我们定义一个类之后,如果我们没有写构造函数,系统会为我们自动添加一个默认的构造函数。一旦我们自己定义了一个构造函数,系统就不会再为我们添加那个无参的构造函数了,所以此时最好自己手动再写一个无参的构造函数,以方便使用。
(6) 利用 :this() 和 :base(),构造函数可以调用其他构造函数。
静态构造函数只能对静态数据成员进行初始化,而不能对非静态数据成员进行初始化;非静态构造函数既可以对静态数据成员赋值,也可以对非静态数据成员进行初始化。
三、 类的继承中构造函数的调用问题
派生类对象的初始化是由基类和派生类共同完成的。当创建派生类的对象时,系统将会调用基类的构造函数和派生类的构造函数,构造函数的执行次序是:先执行基类的构造函数,再执行派生类的构造函数。至于执行基类的哪个构造函数,缺省情况下是执行基类的无参构造函数,如果要执行基类的有参构造函数,则必须在派生类构造函数的成员初始化列表中指出。
例: static void Main(string[] args)
{
B objB0 = new B("Class B");
B objB1 = new B("Class A", "Class B");
Console.ReadKey();
}
public class A
{
public A() //无参构造函数
{
Console.WriteLine("Non Parameter!");
}
public A(string str)
{
Console.WriteLine(str);
}
}
public class B:A //B类继承自A类
{
public B(string strB):base() //先调用基类A中无参构造函数,再调用B类含一个参数的构造函数
{
Console.WriteLine(strB);
}
public B(string strA,string strB):base(strA) //先调用基类A中含一个参数的构造函数,再调用B类含两个参数的构造函数
{
Console.WriteLine(strB);
}
}
输出:
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net