管志鹏的计算机主页

C# ASP.NET Java J2EE SSH SQL Server Oracle
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

面向对象的几个概念性问题

Posted on 2008-08-29 20:32  管志鹏  阅读(144)  评论(0编辑  收藏  举报
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5namespace oop
  6{
  7    class Person
  8    {
  9        public string name;
 10        public  int age;
 11
 12        /**
 13         * static修饰的字段
 14         * 
 15         * 用static修饰的字段,它们属于类,而不属于类的某一个实例,
 16         * 也就是说,在调用静态字段时,只能通过类名来调用,即(Person.sex)
 17         * 而不能通过类的某一个实例来调用,而不是(Person person = new Person();person.sex)
 18         * 2.
 19         * 如果方法被声明为静态的,也是如此
 20         */

 21 
 22        
 23        public static string sex;
 24
 25
 26        /**构造方法
 27         * 特点:
 28         * 1.与类名相同
 29         * 2.构造方法一般被声明为public
 30         * 3.构造方法一般用来初始化成员变量
 31         * 4.构造方法可以重载
 32         * 5.构造方法在实例化对象的时候被调用
 33         * 6.如果类中没有默认构造方法,也没有带参数的构造方法,编译时,将会自动添加一个默认构造方法,
 34         * 7.如果类中有带参数的构造方法,而没有默认构造方法,则编译器不会再添加默认构造方法,
 35         * 8.默认构造方法也叫无参构造方法
 36         */

 37         
 38        public Person()
 39        {
 40
 41        }

 42
 43        public Person(string name,int age)
 44        {
 45            /**
 46             * this
 47             * this代表类的实例.
 48             * 如果一个字段或者方法被声明为static的,则不能用this来调用,因为static声明的字段或者方法属于类,
 49             * 而this代表的是类的实例(如:this.sex是错误的)
 50             */
 
 51            this.name = name;
 52            this.age = age;
 53            
 54        }

 55        /**
 56         * 方法的重载
 57         * 
 58         * 重载的特点:
 59         * 1.方法名都要相同
 60         * 2.方法的可以参数不同,返回值可以不同,方法的访问权限可以不同,方法参数不同的几种情况如下:
 61         * 重载的几种情况:
 62         * 
 63         * 1.参数的类型不同
 64         * 2.参数的个数不同()
 65         * 3.参数的顺序不同(参数的列表不同 在C# 中,这种情况没有实际使用价值)
 66         * 4.返回类型不同
 67         * 5.访问修饰符不同?????????????
 68         */

 69
 70        public void GetInfo()
 71        {
 72            Console.WriteLine("这个是无参的方法");
 73        }

 74
 75        public void GetInfo(string name)
 76        {
 77            Console.WriteLine("姓名是:"+name );
 78        }

 79
 80        public int GetInfo(int age)
 81        {
 82            Console.WriteLine("年龄:"+age);
 83            return age;
 84        }

 85
 86        internal void GetInfo(int age,string name)
 87        {
 88            Console.WriteLine(" 年龄: " + age + "姓名:" + name);
 89        }

 90
 91        public void GetInfo(string name,int age)
 92        {
 93            Console.WriteLine("姓名:" + name +" 年龄: " + age  );
 94        }

 95
 96       
 97
 98        /* 用static修饰的方法
 99         * 
100         * 1.static修饰的方法中,不能用this关键字来调用实例字段
101         * 2.static修饰的方法中,也不能直接调用实例字段,如果要调用这些字段,
102         *    要先实例化对象(如 Person p1  =new  Person();p1.age=2;)
103         * 3.静态方法中,可以类名调用静态方法
104         */

105        public static void StaticInfo()
106        {
107            
108            
109           
110            Console.WriteLine("这个方法是一个静态方法");
111        }

112        /**
113         * 析构函数
114         * 
115         * 特点:
116         * 1.析构函数前有一个"~",表明是一个析构函数
117         * 2.析构函数的函数名和类名相同
118         * 3.一个类只有一个析构函数
119         * 4.析构函数没有参数
120         * 5.析构函数没有返回值
121         * 6.析构函数没有访问修饰符
122         * 7.析构函数不能重载
123         * 8.析构函数不能实现继承
124         * 9.析构函数是用来清理垃圾的(如:用来清除不再使用的对象)
125         * 10.析构函数不用手动调用,而是由垃圾回收器自动调用
126         * 
127         */

128        ~Person()
129        {
130
131        }

132        
133    }

134    class Program
135    {
136        
137     
138        static void Main(string[] args)
139        {
140            Person p = new Person();
141            
142            p.GetInfo();
143            Console.WriteLine("\n");
144
145            p.GetInfo("sofie");
146            Console.WriteLine("\n");
147
148            p.GetInfo("sofie"21);
149            Console.WriteLine("\n");
150
151            p.GetInfo(21,"sofie");
152            Console.WriteLine("\n");
153            
154
155            int a = p.GetInfo(12);
156            Console.WriteLine(a);
157
158        }

159    }

160}

161
162