| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 765 人关注过本帖
标题:各位高手,麻烦帮下忙!
只看楼主 加入收藏
doity13
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-7-23
收藏
 问题点数:0 回复次数:6 
各位高手,麻烦帮下忙!
各位能给我解释一下么
1、静态变量
2、虚方法和接口的区别
3、重载和override的区别
谢谢
搜索更多相关主题的帖子: 麻烦 
2005-07-23 14:54
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 

静态变量:不需要建立实体便可以调用的量 声明时修饰符里面需要有static才代表静态变量(如果使用const声明则表示常量,常量不可以改变,调用时也不需要建立实体,用const声明不可

以再加static一起声明) public class a { public static int i = 123;//静态变量 public int i2=123;//非静态 public const int Num=0;//常量,不可以改变的量 public static const int Num=0;//错误,声明常量时不能使用static,因为const事实上已经是 //static的了 public static void Main()//Main方法必须要为静态 { a A = new a();//一个a类型的变量A,在声明时也对其用new关键字进行了初始化(建立了内存实体) Console.WriteLine(A.i);//错误,因为A是已经建立实体的a类,而i是静态的,无法在实体中被调 //用 Console.WriteLine(A.i2);//OK,i2是非静态的 Console.WriteLine(a.i);//OK,直接调用a类的i,这个地方并没有建立它的实体 Console.WriteLine(a.Num);//OK,调用常量跟调用静态变量一样 a.Num=a.i;//错误,Num是常量,无法被更改 } } 注意,常量只可以为实值类型(Value Type:int,long,byte,double,Single....)

重载与override: 重载与override是两个完全不同的概念,override是子类对父类而言的,重载则是一个类自己对自己而言的 A类继承自B类,如果说B类中有些成员、方法、属性等声明为virtual,那就代表A类可以使用override关键字来“覆盖”基础类中的内容。 但是重载,是指一个类中可以多个索引、有同名的方法等,以不同的参数来区别之

public class B { public int Int = 0; public virtual int Inte{get{return 123;}}//这是一个virtual的属性,这意味着继承自这个类的类可以修改这个属性 public void Do(int i)//声明了一个整数类型的参数 { Console.WriteLine("1");//第一个do,输出 1 } public void Do(long l)//因为参数类型不同于上面那个方法,虽然名字相同,但是仍然允许编译,因为在将来调用这个名字的方法的时候,

编译器会自动根据调用这个方法时所传送的参数来选择适合的方法,这就是重载 { Console.WriteLine("2");//第二个do,输出 2 } } public class A : B { public override int Inte{get{return 321;}}//这个地方override了B类的Inte属性,如果Inte不是virtual,则不允许override public override int Int = 1;//错误,不可以这样,因为Int不是virtual的 new public int Int = 1;//这样才可以,使用new关键字来隐藏基础类中的内容,这个你可以暂时不了解,看了就是了 this.Do(123);//这个类因为继承自B类,所以它拥有B的一部分成员,包括这那两个Do方法,这里调用Do时传送的是一个int的量,所以调用的是第

一个Do,会输出 1

this.Do((long)123);//这个地方传送的是一个long类型的量,所以会执行第二个Do,输出 2 }

虚拟方法和接口

抽象方法只能够存在于抽象类中, 抽象方法只能够有声明的部分,而不能够有实现部分,例如:public abstract void a();//以";"代替"{...}" 抽象方法是默认为virtual的,所以你在声明一个抽象方法时不能够再使用virtual关键字 抽象类如果得不到继承,几乎没有什么意义,而在你继承了一个抽象类以后,对于里面的每一个抽象成员你都必须override之,至于为什么要

这样,很容易理解,抽象方法仅仅有一个声明的部分,没有任何实现的代码,不override,它又有什么意义呢? 抽象类中不止可以有抽象的方法,还可以有其他类型的方法(就是非抽象的方法,非抽象的方法可以包含内容的代码) 抽象类可以继承自其他的类,同样,也可以继承自另一个抽象类

有一个共同点:抽象类和接口都不能够被建立内存实体,都必须先得到继承,然后再建立继承的那个类的实体(像Image,你就无法直接建立它的实

体,因为它是一个抽象类)

接口里面所有的内容都只能有声明的部分,不能够有实现的代码,这一点跟抽象类中的抽象方法很像, 接口里声明的所有成员都必须是public的,但是事实上,接口中的每个成员也都是默认为public的,所以你在声明它的时候不能再加一个public 接口能够继承自其他的接口 你在使用接口的时候,对接口中定义的每一个方法都必须完整地实现之,而且在实现它们的时候,你不需要使用override关键字

abstract class B//声明了一个抽象类 { public int I = 0;//这里声明了一个普通的变量 public abstract void Do();//这里声明了一个抽象方法,注意这里是如何声明的 public abstract void Do(int i); public void Do2()//这里声明了一个普通的方法 { Console.WriteLine("Do2"); } } class A:B//因为A继承自B,所以对于B中的所有public成员,A都有 { public override void Do() //对于每一个abstract的方法都必须override { Console.WriteLine("new Do1"); } public override void Do(int i)//对于每一个abstract的方法都必须override { Console.WriteLine("new Do2 "+i.ToString()); } } public class C { public static void Main()//Main必须为静态方法 { A a = new A(); a.Do();//输出"new Do1" a.Do(123);//输出"new Do2 123" a.Do2();//输出"Do2" } }

public interface I1 { void Say();//记住,这个地方不能够使用其他的修饰符 public void Says();//错误,使用了public修饰符,因为Interface中的成员都是默认为public的 } public class AA:I1 { public void Say()//因为I1这个接口定义了一个void的Say方法,所以在这里必须予以实现 { Console.WriteLine("Say AA!"); } }

还满意吗?

[此贴子已经被作者于2005-7-23 21:45:24编辑过]


寻求挑战,追求完美 Oh,my god!
2005-07-23 16:10
jackey163
Rank: 1
等 级:新手上路
帖 子:230
专家分:0
注 册:2005-7-21
收藏
得分:0 
发拉,学到不少啊

.net 方面可以交流下 MSN:jackeyhuang123@
2005-07-25 09:10
in羊羊
Rank: 1
等 级:新手上路
帖 子:144
专家分:0
注 册:2005-4-17
收藏
得分:0 
你讲的太好拉
我比 以前更清楚拉
2005-07-25 09:46
gaofangtao
Rank: 1
等 级:新手上路
帖 子:128
专家分:0
注 册:2005-4-7
收藏
得分:0 
谢谢斑竹啦!

我相信我的付出
2005-07-25 14:07
adtf_liu
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-7-25
收藏
得分:0 
有一本叫“c#精髓”的书,里边介绍了很多重要的概念!
自已找来看看吧!!

纯属个人意见,仅供参考!
2005-07-25 15:08
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
哈哈,多谢楼上几位兄弟的夸奖~

寻求挑战,追求完美 Oh,my god!
2005-07-25 15:59
快速回复:各位高手,麻烦帮下忙!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039320 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved