C# 继承类作为引用
我想使用一个具有类型a参数的函数。我想给它传递一个从a派生的类B。但C#不想C# 继承类作为引用,c#,class,inheritance,polymorphism,pass-by-reference,C#,Class,Inheritance,Polymorphism,Pass By Reference,我想使用一个具有类型a参数的函数。我想给它传递一个从a派生的类B。但C#不想 class A { int m_a; } class B : A { int m_b; } void ShowandEditData( ref A _myvar) { ... } 现在,我想这样做: B myB = new B(); ShowandEditData(ref myB); 我尝试过很多方法,比如使用base属性。我想我做错了 用C#能做到这一点吗 --由于伪代码造成混乱而编辑的代码。(抱歉,
class A
{
int m_a;
}
class B : A
{
int m_b;
}
void ShowandEditData( ref A _myvar)
{
...
}
现在,我想这样做:
B myB = new B();
ShowandEditData(ref myB);
我尝试过很多方法,比如使用base
属性。我想我做错了
用C#能做到这一点吗
--由于伪代码造成混乱而编辑的代码。(抱歉,第一篇帖子)您必须在调用方法时使用
ref
键:
ShowData(ref myB);
实际上,中的类是引用值,因此不需要使用ref
。当您确实希望传递引用时,仅对值类型使用ref
,short
,double
,decimal
,bool
,DateTime
等结构
在你的情况下,你只需要
object ShowData(A _myvar)
{
...
}
只需从方法声明中删除
ref
。像这样:
void ShowData(A _myvar)
{
...
}
ref
关键字
如果您可以更改ShowData
的签名,那么我建议您这样更改:
public A ShowData(A _myvar)
{
return new B(); // Or A() or whatever.
}
这样称呼:
B myB = new B();
myB = ShowData(myB);
或者,您需要为这两个类提供ShowData
的重载:
public void ShowData(ref A _myvar)
{
_myvar = new B();
}
public void ShowData(ref B _myvar)
{
_myvar = new B();
}
然后编译器可以选择重载:
A myA = new A();
B myB = new B();
ShowData(ref myB);
ShowData(ref myA);
另外,
ShowData
不是一个好名字MutateData
听起来更合适:-)或者,更好的做法是,删除函数声明中的ref
。也许OP想要改变调用方的引用?我还需要更新对象,这就是我需要引用的原因。但是,在C中,类作为引用类型工作,但保留在那里没有问题。在方法的调用中,您必须指定ref
keywork作为我的第一个示例。我不认为简单地向调用添加ref
会起作用,因为如果使用ref
和ShowData分配一个新值,它可以将任何值分配给变量a或从中派生的变量,但它不一定与变量类型B兼容。因此,只能使用类型A的变量调用它。函数
不是有效的C#关键字。此代码有各种各样的错误。编译器错误消息告诉您什么?为什么ref关键字不正确?解决方案不是在函数
(OP)和无效
(答案)之间进行替换吗?@Flater,好的,是和否。我回答时的问题在方法调用中没有参考
,只有在声明中。在c#中,Function
不是一个关键字,这是正确的,因此显然存在一些问题。事实上,MutateData听起来更好,我只是从我的板上复制了伪代码。事实上,“多态性”是我想要做的。你的链接似乎证实了这在c#中是不可能的;但这是一种耻辱。我会继续寻找解决办法。