【黑马程序员】4.C#面向对象之类和构造函数
2013-08-03 22:59
330 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一、 类
1、 类的定义
C#使用class关键字来定义类
语法:
[访问修饰符]class
类名
{
数据成员;
函数成员;
}
在C#中,访问修饰符有四种:
public:可以在程序的任何地方访问
internal:只能在本项目中被访问。
private:只能在本类中被访问
protected:只能在本类或子类中被访问
在类这个级别,定义类时不指定访问修饰符的情况下,默认为internal;
而在类中定义变量或方法时不指定访问修饰符,那么默认为private。
下面定义一个名叫Person的类,Person类包含两个数据成员和一个成员方法:
2、 类的实例化
定义好一个类之后,需要创建类的对象才能使用,通过类产生一个对象的过程,就叫类的实例化。C#中我们使用new关键字来创建类的实例(也叫做对象)。
实例化类的语法:
类名对象名
= new
类名();
如: Person lisi = new Person();
3、 加与不加static的区别
1) 不加static的方法又叫做实例方法,在调用之前必须先对类进行实例化,也就是创建一个类的对象,然后通过实例名.方法名
来访问。
2) 加了static的方法叫静态方法,它是属于类本身的而不是属于类的对象的,调用的时候不需要对类进行实例化,也就是说不需要创建类的实例,直接通过类名.方法名
来调用。
3)
使用原则:
静态方法只能访问类的静态变量,不能访问类的非静态变量;
静态方法只能使用类名来调用,不能使用实例来调用。
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
非静态方法必须通过类的实例来调用。
例:
输出:
二、 构造函数
C#中的构造函数是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化。
C#中的构造函数有以下主要特点:
(1) C#构造函数的名字必须与类名相同;
(2) C#构造函数没有返回类型,它可以带参数也可以不带参数;
(3) C#构造函数主要作用是完成对类的初始化的工作;
(4)
在创建一个类的新对象(使用new关键字)时,系统会自动调用构造函数初始化新对象;
(5)
当我们定义一个类之后,如果我们没有写构造函数,系统会为我们自动添加一个默认的构造函数。一旦我们自己定义了一个构造函数,系统就不会再为我们添加那个无参的构造函数了,所以此时最好自己手动再写一个无参的构造函数,以方便使用。
(6) 利用 :this() 和 :base(),构造函数可以调用其他构造函数。
静态构造函数只能对静态数据成员进行初始化,而不能对非静态数据成员进行初始化;非静态构造函数既可以对静态数据成员赋值,也可以对非静态数据成员进行初始化。
三、 类的继承中构造函数的调用问题
派生类对象的初始化是由基类和派生类共同完成的。当创建派生类的对象时,系统将会调用基类的构造函数和派生类的构造函数,构造函数的执行次序是:先执行基类的构造函数,再执行派生类的构造函数。至于执行基类的哪个构造函数,缺省情况下是执行基类的无参构造函数,如果要执行基类的有参构造函数,则必须在派生类构造函数的成员初始化列表中指出。
例:
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
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
相关文章推荐
- 黑马程序员——C#面向对象加强
- 黑马程序员--C#面向对象总结
- 黑马程序员----面向对象1(匿名对象、封装、构造函数、this、static)
- 黑马程序员——Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)
- 黑马程序员 C#面向对象基础知识点
- 黑马程序员-------- java面向对象 封装、构造函数、this static关键字、单例设计
- 黑马程序员--C#面向对象基础知识
- 黑马程序员面试题面向对象一(封装,构造函数,this,static,单例设计模式,继承)
- 黑马程序员_面向对象1_(封装、构造函数、this、static、单例设计模式)
- 【黑马程序员】C#面向对象基础
- 黑马程序员_C#面向对象学习知识总结2
- 黑马程序员之C#学习笔记:面向对象小结
- 黑马程序员-----java面向对象之封装、构造函数、this关键字、static静态总结*
- [黑马程序员二]:C#面向对象基础
- 黑马程序员——OC---面向对象之类和对象
- 黑马程序员----C#面向对象自学笔记
- 黑马程序员_C#面向对象总结
- 黑马程序员——3.面向对象(堆栈、匿名、封装、构造函数、this、静态、数组工具类)
- 浅谈c# 面向对象之类与对象
- 黑马程序员-博客 (3) 面向对象一之类和对象、成员变量和局部变量、继承、封装、多态