Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 普遍接受的私有变量声明公约_C#_Oop - Fatal编程技术网

C# 普遍接受的私有变量声明公约

C# 普遍接受的私有变量声明公约,c#,oop,C#,Oop,我目前正在重构一些难看的代码,并将一个庞大且过于复杂的类a拆分为超类a和子类B和C 我的问题是,如果我在过度复杂的类中有私有变量,它们在拆分后只与子类B相关,那么在哪里声明它们有一个普遍接受的约定吗 我的选择是: protected variable in superclass A pro: all variables located in central location con: some variables in superclass unused by all subclasses p

我目前正在重构一些难看的代码,并将一个庞大且过于复杂的类a拆分为超类a和子类B和C

我的问题是,如果我在过度复杂的类中有私有变量,它们在拆分后只与子类B相关,那么在哪里声明它们有一个普遍接受的约定吗

我的选择是:

protected variable in superclass A
pro: all variables located in central location
con: some variables in superclass unused by all subclasses

private variable in subclass B
pro: only shared variables present in superclass A (more "proper"?)
con: more complicated code management
谢谢你的时间

我的问题是,如果我在过度复杂的类中有私有变量,它们在拆分后只与子类B相关,那么在哪里声明它们有一个普遍接受的约定吗

如果它们只与类B相关,则将它们放在类B中。若要执行其他操作,则会降低代码的可读性,并在将来造成混乱

如果你想向某人证明你的答案是正确的,你可以指出,这解决了你分裂的阶级问题

我的问题是,如果我在过度复杂的类中有私有变量,它们在拆分后只与子类B相关,那么在哪里声明它们有一个普遍接受的约定吗

如果它们只与类B相关,则将它们放在类B中。若要执行其他操作,则会降低代码的可读性,并在将来造成混乱


如果你想向某人证明你的答案,你可以指向,它解决了你的分类问题。

@Ramhound是对的:变量应该在需要它的类中

A - variables that are shared by both C and B
B - variables that belongs to B only
C - Variables that belongs to C only

@Ramhound是对的:变量应该在需要它的类中

A - variables that are shared by both C and B
B - variables that belongs to B only
C - Variables that belongs to C only

明确地将它们放在子类B中,您应该将方法放在它们都继承自的类中的唯一原因是如果两者都将使用该方法,或者有可能在不久的将来添加另一个类,并使用方法、属性、字段,或者在您的情况下,变量明确地将它们放在子类B中,您应该将方法放在它们都继承自的类中的唯一原因是,如果两者都将使用该方法,或者在不久的将来可能会添加另一个类,并将使用方法、属性、字段或变量(在您的情况下),那么您创建超类的确切原因是什么。变量应该在需要它的类中。听起来好像你正在从一个糟糕的代码设计走向最糟糕的。你所做的事情没有通用的约定。所谓超类,我指的是父类。最初的代码很难看,因为由于时间限制,我在其中添加了一个完全不同的用例,现在我有时间进行重构,我想将功能正确地拆分为一个父类,其中包含虚拟函数和继承并实现它们的子类。这种代码设计有什么问题?不过你回答了我的问题,谢谢-变量应该在需要它们的类中。小心继承。更喜欢授权。嗯。。。我理解对委托的偏好,但为什么对继承持谨慎态度?为什么要创建一个超类。变量应该在需要它的类中。听起来好像你正在从一个糟糕的代码设计走向最糟糕的。你所做的事情没有通用的约定。所谓超类,我指的是父类。最初的代码很难看,因为由于时间限制,我在其中添加了一个完全不同的用例,现在我有时间进行重构,我想将功能正确地拆分为一个父类,其中包含虚拟函数和继承并实现它们的子类。这种代码设计有什么问题?不过你回答了我的问题,谢谢-变量应该在需要它们的类中。小心继承。更喜欢授权。嗯。。。我理解委托的偏好,但为什么要谨慎继承?谢谢,事后看来是有道理的,尤其是当应用于两个以上的子类时。谢谢,事后看来是有道理的,尤其是当应用于两个以上的子类时。我想当你说更难管理时,你是在考虑实例和对象,因为在这种情况下是的,所有的属性都应该放在类中,实例应该只使用相关的变量。但是,当谈到继承时,情况正好相反,只在继承自的类中放置所需的内容。您第一次就做对了-我只是被我的实现规模小和粗糙弄糊涂了。如果我考虑过一个更大的实现,我会意识到将所有子类属性作为受保护的属性放在超类中是一个糟糕的主意。我想当你说更难管理时,你会想到实例和对象,因为在这种情况下是的,所有属性都应该放在类中,实例应该只使用相关的变量。但是当涉及到继承时,情况正好相反,只把需要的东西放在继承的类中。你第一次做对了——我只是被t搞糊涂了 他认为我的实施规模很小,而且我很粗野。如果我考虑一个更大的实现,我会意识到将所有子类属性作为受保护的属性放在超类中是一个糟糕的想法。