首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

看《Visual C#——从入门到精通》的有关问题

2012-02-12 
看《Visual C#——从入门到精通》的问题C# codeinterface IToken{...}class DefaultTokenImp1{...}class Ident

看《Visual C#——从入门到精通》的问题

C# code
interface IToken{...}class DefaultTokenImp1{...}class IdentifierToken : DefaultTokenImp1 , IToken{...}

然后书上说了:“通过学习,我们知道可以将一个变量定义成层次结构中较高位置的一个类,然后用这个变量来引用一个对象。类似地,可以将一个变量定义成类所实现的接口,然后用这个变量来引用一个对象。还是前面的例子,你可以使用一个IToken变量来引用一个IdentifierToken对象,如下所示:”
C# code
IdentifierToken it = new IdentifierToken();IToken iTok = it;  //合法

书上又说了:“利用这种技术,你可以在定义方法的时,让它接受不同类型的参数,只要类型实现了一个指定的接口。例如,下面展示的Process方法可以获取实现了IToken接口的任何参数:”
C# code
void Process(IToken iTok){...}

注意,只能调用认这种方式引用一个对象时通过接口可见的方法。




先解释下红色的部分,然后在解释下黄色的部分,最后再解释下剩余的部分吧,谢谢

[解决办法]
通过学习,我们知道可以将一个变量定义成层次结构中较高位置的一个类,然后用这个变量来引用一个对象
==
基类的引用可以指向派生类的对象

人 a = new 男人();

类似地,可以将一个变量定义成类所实现的接口,然后用这个变量来引用一个对象
==
接口的引用可以指向实现接口的任何类的对象的实例,此时接口的功能即此对象实现的功能


开关 a = new 灯();
a.开();

开关 b = new 马桶();
b.开();

同样是开关这个接口,由于指向的对象不同,实现的功能就不一样
[解决办法]
C# code
using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1{    interface ITok  //接口    {         int Get();//提供方法    }    class DefaultTokenImp1    {        public int c;        public int d;    }    class IdentifierToken : DefaultTokenImp1, ITok    {        public int Get()//实现接口方法        {            int j;            j = 10;            return j;        }    }    class Program    {        static void Main(string[] args)        {            IdentifierToken it = new IdentifierToken();           // IdentifierToken its = new DefaultTokenImp1();出错,子类无法转换为基类型。            DefaultTokenImp1 itt = it;//基类引用子列,没出错,只当it是对象,且通过对子类实例的变量赋值而达到使itt基类实例中变量的值发生改变。              it.c = 10;            it.d = 20;                    ITok itok = it;//合法,接口只提供方法,不提供实现,itok接口搜寻并调用it中的方法,来实现itok.GET()这个方法;              Console.WriteLine(itok.Get());//输出            Console.WriteLine(itt.c);//父类变量            Console.WriteLine(itt.d);            Console.ReadLine();        }    }} 

热点排行