gpt4 book ai didi

c# - 使用子类和方法的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:02 25 4
gpt4 key购买 nike

有一些新手问题。我有 6 个类(class):

public class MainSettingsClass
{
int a;
int b;
}

public class SubSettingsClass_1 : MainSettingsClass
{
int c;
}

public class SubSettingsClass_2 : MainSettingsClass
{
int d;
}

public class ParentClass
{
public MainSettingsClass settings;
}

public class ChildClass_1 : ParentClass
{
}

public class ChildClass_2 : ParentClass
{
}

现在是问题。 ChildClass_1 与 SubSettingsClass_1 和 ChildClass_2 与 SubSettingsClass_1

ChildClass_1 firstClassVar = new ChildClass_1();
ChildClass_2 secondClassVar = new ChildClass_2();
SubSettingsClass_1 firstClassSettings = new SubSettingsClass_1();
SubSettingsClass_2 secondClassSettings = new SubSettingsClass_2();
firstClassVar.settings = (MainSettingsClass)firstClassSettings;
secondClassVar.settings = (MainSettingsClass)secondClassSettings;

如果我需要使用“firstClassVar.settings”获取“c”变量,我每次都需要这样写:

 ((firstClassSettings)firstClassVar.settings).c
  1. 这是访问变量的正确方法吗?
  2. 或者有更好的方法存在?
  3. 这段代码是否符合编程规则?还是不正确?

抱歉英语不好。

最佳答案

  1. 这是访问 c 变量的“正确”方式吗? 。如果你不得不沮丧,至少先检查一下:

    firstClassSettings derivedSettings = firstClassVar.settings as firstClassSettings;
    if (derivedSettings != nulL)
    {
    //Do whatever with derivedSettings.c
    }
  2. 有一个更好的方法 :) 它叫做多态。您的类非常通用,因此很难确切您的设计应该是什么样子,但是您的主类应该有一些方法,派生类可以覆盖这些方法以获得自定义行为。

    <
  3. 向下转型是一种巨大的代码味道。有时没有办法绕过它(尤其是在遗留代码中,或在某些 Object 覆盖和 WPF 接口(interface)中)但是,您应该尽可能避免它。在您自己的对象/代码中更是如此。

关于c# - 使用子类和方法的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com