紧急求助: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”
...全文
37 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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替换原则
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.7w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
申请成为版主
帖子事件
创建了帖子
2004-03-16 08:16
社区公告

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