紧急求助:out子类不能转化为out基类?

chelsea 2004-03-16 08:16:51
public class Base{
}
public class Sub:Base{
}

public class Test{
Sub sub;
void test(){
func(out sub);
}

void func(out Base obj){
obj = new Sub();
}
}
C:\......\element.cs(29):
参数“1” : 无法从“out ClassLibrary1.NewFolder1.xpdl.Sub”转换为
“out ClassLibrary1.NewFolder1.xpdl.Base”
...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chelsea 2004-03-16
  • 打赏
  • 举报
回复
有点天真,不过还是谢谢
qiume 2004-03-16
  • 打赏
  • 举报
回复
或者:
public class Base
{
}
public class Sub:Base
{
}

public class Test
{
void test(Sub sub)
{
func(sub);
}

void func(Base obj)
{
obj = new Sub();
}
}
qiume 2004-03-16
  • 打赏
  • 举报
回复
由于在函数间传递对象的时候,本身就是引用传递,
所以应改为:
public class Base
{
}
public class Sub:Base
{
}

public class Test
{
Sub sub;
void test()
{
func(sub);
}

void func(Base obj)
{
obj = new Sub();
}
}

chelsea 2004-03-16
  • 打赏
  • 举报
回复
我现在认为是如果允许转换的化,将无法保证类型安全性:

func(out Base b){
b = new OtherSubClass();
}

Sub sub;
OtherSubClass osub;
func(out sub); //error
func(out osub);//ok

违反那个什么Liskov替换原则

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧