今天学引用类型转换的时候,其中有点总是无法理解,以下是我的代码:
class Program
{
static void Main(string[] args)
{
Person[] pers = new Person[4];//定义一个Person类数组
Chinese ch1 = new Chinese();
Chinese ch2 = new Chinese();
Japanese jp1 = new Japanese();
Japanese jp2 = new Japanese();
pers[0] = ch1;
pers[1] = ch2;
pers[2] = jp1;
pers[3] = jp2;
for (int i = 0; i<pers.length;i++)
{
if(pers[i] is Chinese)
{
Chinese c = pers[i] as Chinese;
c.SayHello();
}
else if (pers[i] is Japanese)
{
Japanese j = pers[i] as Japanese;
j.SayJapanese();
}
}
Console.ReadKey();
}
}
class Person
{
}
class Chinese
{
public void SayHello()
{
Console.WriteLine("你好,我是中国人!");
}
} class Japanese: Person
{
public void SayJapanese()
{
Console.WriteLine("阿里阿多!");
}
}[/size]由于不知道为何不能粘贴代码,我只好手动写了这些,格式有不清楚的地方请各位见谅。
这里我搞不明白的地方就是我用红色标起的地方,既然已经定义了if(pers[i] is Chinese)为什么还要再对pers[i]进行一次强制转换才能赋值给c?请各位高手帮忙解答一下,谢谢。
class Program
{
static void Main(string[] args)
{
Person[] pers = new Person[4];//定义一个Person类数组
Chinese ch1 = new Chinese();
Chinese ch2 = new Chinese();
Japanese jp1 = new Japanese();
Japanese jp2 = new Japanese();
pers[0] = ch1;
pers[1] = ch2;
pers[2] = jp1;
pers[3] = jp2;
for (int i = 0; i<pers.length;i++)
{
if(pers[i] is Chinese)
{
Chinese c = pers[i] as Chinese;
c.SayHello();
}
else if (pers[i] is Japanese)
{
Japanese j = pers[i] as Japanese;
j.SayJapanese();
}
}
Console.ReadKey();
}
}
class Person
{
}
class Chinese
{
public void SayHello()
{
Console.WriteLine("你好,我是中国人!");
}
} class Japanese: Person
{
public void SayJapanese()
{
Console.WriteLine("阿里阿多!");
}
}[/size]由于不知道为何不能粘贴代码,我只好手动写了这些,格式有不清楚的地方请各位见谅。
这里我搞不明白的地方就是我用红色标起的地方,既然已经定义了if(pers[i] is Chinese)为什么还要再对pers[i]进行一次强制转换才能赋值给c?请各位高手帮忙解答一下,谢谢。
{
if(c is textbox)
{
(c as Textbox).text="";
}
}
这段跟你的意思很像
if(per[i] is Chinese)
{Chinese c = per[i] as Chinese; }
既然if里面已经做了判断,当per[i]是Chinese的时候,进行转换,那不是多此一举了吗?
你也可以这样:
Chinese c = pers[i] as Chinese;
if(c != null)
{
c.SayHello();
}
else
{
Japanese j = pers[i] as Japanese;
if(j != null)
{
j.SayJapanese();
}
}
if(pers[i] is Chinese)
{
Chinese c = pers[i] as Chinese;
c.SayHello();
}
会产生警告,大概意思是说这么写代码会带来性能问题,因为这里会产生两次类型转换:
第一次是
if(pers[i] is Chinese)
第二次是
Chinese c = pers[i] as Chinese;
建议的做法是:
Chinese c = pers[i] as Chinese;
if (c != null)
{
c.SayHello();
}