[编程问题] 如何给 所有子类的 同个父类属性 赋值。

2020-08-13 10:12:13 +08:00
 BenWang

现在有一个父类 RequestBase,所有的子类都继承自它。

 public abstract class RequestBase
 {
        public long Version { get; set; }
 }


 public class LoginRequest : RequestBase
 {
        public string UserName { get; set; }
 }

现在我想有一个方法,可以给所有的 类赋值属性 Uid,我尝试这样做,但是会提示 cannot convert from 'ref LoginRequest' to 'ref RequestBase'

 public void Todo() {
       LoginRequest _req = new LoginRequest();
       _req.UserName = "zhangsan";
       SetClientInfo(ref _req);
 }

  public void SetClientInfo(ref RequestBase _reqBase)
  {
            _reqBase.Version = "v3.0.0";
  }

如果强转换,会丢失掉 LoginRequest 类里面的属性; 又不希望丢失掉子类的属性值。该如何做?

2483 次点击
所在节点    程序员
9 条回复
liujunyuan
2020-08-13 10:28:19 +08:00
如果所有子类想要共享一个成员变量的话可以使用 static 成员变量.
但和你这个报错无关,不太懂 java 的 ref 类型,我理解 java 的 ref 和 c++的指针类似,这种 pDerived 转换成 pBase 的 upcasting 应该没问题吧,我也不理解,插眼等一个大神来解释
yesterdaysun
2020-08-13 10:43:32 +08:00
难道不是吧 ref 去掉就可以了? RequestBase 本来就是引用类型的对象
lawler
2020-08-13 10:47:00 +08:00
public <T> void SetClientInfo(<T extends RequestBase> t)
{
t.Version = "v3.0.0";
}
BenWang
2020-08-13 10:59:07 +08:00
我试了一下,好像是我想多了。根本不需要 ref 就可以

![汗颜啊。。。。]( )
wysnylc
2020-08-13 11:06:57 +08:00
@liujunyuan #1 java 没有 ref 他这是 c#吧
kiracyan
2020-08-13 14:26:36 +08:00
第一次见空方法用 ref 的 直接 return 不香吗
geelaw
2020-08-13 14:30:16 +08:00
因为 ref RefType argName 的含义是 argName 对应一个静态类型是 RefType 的变量,且方法内对 argName 的赋值可以反映到传入 argName 的变量。显然你不能把静态类型是 Derived 的变量传入 ref Base,否则方法体内可以对 argName 赋值 new AnotherDerived,然后类型安全就会爆炸。

楼主需要认真学习 C#,值类型和引用类型的基本区别还没搞清楚。
foxasan
2020-08-13 17:45:01 +08:00
为什么不提成接口呢???
Goooler
2020-08-13 19:04:57 +08:00
方法名也能大写开头吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697873

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX