繁体   English   中英

我无法从 Z240AA2CEC4B29C56F3BEE520A8DCEE7 中的子 class object 获取基本 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM