![](/img/trans.png)
[英]C# why using reflection get field object, the first field are from child object and then from base class
[英]I can't get value of base class field from child class object in c#
using System;
public class Program
{
public static void Main()
{
CloudCollectionHelper cloudHelper = new CloudCollectionHelper();
SlackHelper slackHelper = new SlackHelper();
cloudHelper.DatabaseID=12345;
Console.WriteLine(slackHelper.GetSlackPageTokens());
}
class CloudCollectionHelper
{
public long DatabaseID { get; set; }
}
class SlackHelper:CloudCollectionHelper
{
public long GetSlackPageTokens()
{
return DatabaseID;
}
}
}
当前 output:0 预期 Output:12345
我需要 output 12345 因为来自 cloudhelper 的 DatabaseID,所以我需要 slackhelper 中的 databaseID。
这是我的 c# 在线编译器: https://dotnetfiddle.net/QNQeEX
子 class 没有从基础 class 获得分配的值。 因为它可能有多个实例。 例如,如果您有
...
CloudCollectionHelper cloudHelper1 = new CloudCollectionHelper();
CloudCollectionHelper cloudHelper2 = new CloudCollectionHelper();
cloudHelper1.DatabaseID = 1234;
cloudHelper2.DatabaseID = 6789;
Console.WriteLine(slackHelper.GetSlackPageTokens()); //It would not know, what value to use.
...
最好的方法是将值直接分配给子 class 或使用 static 修饰符。
编辑:如果您需要从子 class 获取此值,无论出于何种原因,最好的方法是这样做:
...
CloudCollectionHelper cloudHelper = new CloudCollectionHelper();
cloudHelper.DatabaseID = 12345; //First assign the needed Value
SlackHelper slackHelper = new SlackHelper(cloudHelper); //then create a new instance from the child class
...
并从 SlackHelper 子 class 添加构造函数,如下所示:
class SlackHelper:CloudCollectionHelper
{
public SlackHelper(CloudCollectionHelper cloudHelper)
{
this.DatabaseID = cloudHelper.DatabaseID;
}
... //Do everything else what this class needs here
}
如果来自 cloudHelper.DatabaseID 的值可以在运行时更新,您将需要一个事件来更新子 class。 这仍然不是最好的方法,因为 DatabaseID 值已经是公共的,并且可以在没有子 class 的情况下访问。
编辑 2:就像我在评论中已经告诉你的那样,你也可以使用 static 修饰符来避免这个问题。 但这将影响由 CloudCollectionHelper class 创建的每个实例。 一旦您将其设为 static,这将只为所有实例保留 1 个可能的值。
(请记住,如果需要或最好的情况下使用评论,请避免使用幻数)
您的 Object slackhelper 的属性没有受到影响。 您无需创建 CloudCollectionHelper Object。
SlackHelper slackHelper = new SlackHelper();
slackHelper.DatabaseID=12345;
Console.WriteLine(slackHelper.GetSlackPageTokens());
您应该在 class 中创建此属性以允许读取数据库 ID
public long GetSlackPageTokens() { return base.DatabaseID; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.