标签: class-design

如何确定Delphi对象是否属于特定类而不是任何后代类?

我有这些课程和程序:

 TParent = class(TObject);
 TChild1 = class(TParent);     
 TChild2 = class(TParent);

 Procedure DoSomething(obj:TParent);
Run Code Online (Sandbox Code Playgroud)

我想做的是什么时候obj,TParent而不是后代提出异常.

我想过做这样的事情:

if obj.classname = TParent.classname then raise exception.create....
Run Code Online (Sandbox Code Playgroud)

但似乎有点hackish(TM)

更多:我的意图是能够传递共享属性/过程的对象.经过深思熟虑后,根本不需要TParent Object,我需要的是我的答案中显示的接口对象.

delphi class-design

18
推荐指数
4
解决办法
2万
查看次数

"公共"嵌套类与否

假设我有一个"应用程序"类.为了初始化,它需要在构造函数中进行某些设置.我们还假设设置的数量太多,以至于将它们放在自己的类中是很有吸引力的.

比较此方案的以下两种实现方式.

实施1:

class Application 
{
   Application(ApplicationSettings settings) 
   {
       //Do initialisation here
   }
}

class ApplicationSettings 
{
   //Settings related methods and properties here
}
Run Code Online (Sandbox Code Playgroud)

实施2:

class Application 
{
   Application(Application.Settings settings) 
   {
       //Do initialisation here
   }

   class Settings 
   {
      //Settings related methods and properties here
   }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,第二种方法更为可取.它更具可读性,因为它强调了两个类之间的关系.当我编写代码以在任何地方实例化Application类时,第二种方法看起来更漂亮.

现在想象一下,Settings类本身又有一些类似的"相关"类,而该类反过来也是如此.只有三个这样的级别,类命名在'非嵌套'的情况下失控.然而,如果你筑巢,事物仍然保持优雅.

尽管如此,我还是读过人们在StackOverflow上说嵌套类只有在外部世界不可见时才被证明是合理的.也就是说,它们仅用于包含类的内部实现.通常引用的异议是包含类的源文件的大小膨胀,但是部分类是解决该问题的完美解决方案.

我的问题是,为什么我们对嵌套类的"公开暴露"使用持谨慎态度?还有其他反对这种用法的论据吗?

c# class-design nested-class

17
推荐指数
2
解决办法
4657
查看次数

从c ++源代码创建类图?

是否有任何免费工具可用于从c ++源文件生成类图,如果可能,也可用于mfc源文件.

c++ class-design

17
推荐指数
1
解决办法
2万
查看次数

使用嵌套类作为常量?

使用嵌套类对常量进行分组有什么问题?

像这样:

public static class Constants
{
    public static class CategoryA
    {
        public const string ValueX = "CatA_X";
        public const string ValueY = "CatA_Y";
    }
    public static class CategoryB
    {
        public const string ValueX = "CatB_X";
        public const string ValueY = "CatB_Y";
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用:

Console.WriteLine(Constants.CategoryA.ValueY);
Console.WriteLine(Constants.CategoryB.ValueX);
Run Code Online (Sandbox Code Playgroud)

你也可以使"常数" - 类偏...

c# class-design constants nested-class

17
推荐指数
1
解决办法
3878
查看次数

您使用或看过的最好的toString构建器类是什么?是什么让它变得更好

让我们面对它编写好的toString消息是一个无聊的杂乱的工作需要完成,因为它可以真正有助于调试或记录中的检查.

你喜欢或希望在这样的帮手中有什么功能......

  • 转储属性应该带标签.

    name = mP country =澳大利亚......

  • 应该可以跳过某些默认值.

    • 没有必要打印许多0或null的属性.
    • 如果设置标签并且值为null,则不包括任何一个.
  • 标签和值之间的分隔符应该是可更新的,并且在添加标签和值时应自动插入标签和值之间.

  • 它还应该自动插入您选择的分隔符.

    如果你想在包含一个数组时让逗号在值之间留空间,那就这样吧.

  • 它应该自动引用字符串值...因为知道字符串开始和结束的确切位置非常重要.

    *name = mP state ="新南威尔士"

  • 当添加列表,地图或集合时,应该遵守有关引用字符串的规则,使用集合分隔符等.请不要只转储Collection.toString().

我还有其他一些人正在改进,你可以列出自己的想法,观察等.

  new ToStringBuilder()
    .setLabelValueSeparator('=')
    .label("name")
    .value(Country.AUSTRALIA) // -> returns "Australia" without the quotes.
    .label("day of death")
    .value(null) //
    .label("numbers")
    .valueSeparator(",");
    .value(Arrays.asList( 1, 2, 3 )
    .build();
Run Code Online (Sandbox Code Playgroud)

当然会导致"name ="Australia"数字= 1,2,3;

java class-design

17
推荐指数
2
解决办法
8424
查看次数

C#类可以有多少种方法

C#类可以拥有的属性数量是否有限制?

我快速浏览标准ECMA-334并没有找到任何相关信息.

在进入为什么一个有很多方法的课程设计不好之前,我想更明确一下这个意图.当然,我不会手动编写一个包含大量方法的类.我问这个的原因是我需要通过代码生成大量的执行单元.我讨论的是具有单个方法的多个类或具有多个方法的一个大类.

所以对于这个问题,如果有限制我会感兴趣,属性数量,方法的限制是多少.

.net c# methods class-design

16
推荐指数
4
解决办法
7139
查看次数

如何更改用户控件的访问修饰符

我有一个在xaml中创建的用户控件,让我们将其命名为"View".在View.xaml.cs中,我将类View的访问修饰符更改为internal:

internal partial class View : ViewBase { ... }
Run Code Online (Sandbox Code Playgroud)

更改访问修饰符后,编译器会声明错误:

"ABView"的部分声明具有冲突的可访问性修饰符

我的第一个猜测是视图必须通过xaml代码在内部进行.所以我添加了两行xaml:

x:Name="View"
x:FieldModifier="internal"
Run Code Online (Sandbox Code Playgroud)

但这并没有解决错误.我在哪里更改访问修饰符以使内部视图?

c# wpf xaml class-design access-modifiers

16
推荐指数
1
解决办法
9424
查看次数

python 3:类"模板"(返回参数化类的函数)

我正在尝试创建一个传递参数x并返回一个新类的函数C.C应该是固定基类的子类A,只有一个加法:添加某个类属性并设置为相等x.

换一种说法:

class C(A):
  C.p = x # x is the parameter passed to the factory function
Run Code Online (Sandbox Code Playgroud)

这很容易吗?我应该注意哪些问题?

python class-design factory-pattern python-3.x

16
推荐指数
2
解决办法
8938
查看次数

实现属性或实现子类

我有一个叫做的类List_Field,顾名思义,它构建列表输入字段.这些列表输入字段允许用户为每个列表选择单个项目.

我希望能够构建列表输入字段,允许用户为每个列表选择多个项目,所以我有以下两难:

我应该通过multiple_choice_allowed在现有List_Field属性中实现属性来实现,还是应该实现Multiple_Choice_List_Field类的子List_Field类?

面对像这样的困境,我应该遵循什么样的工程原理?

c# java architecture oop class-design

16
推荐指数
1
解决办法
619
查看次数

OO设计问题 - 家长/孩子(通知) - 通函?

我对OO设计过程很新,所以请耐心等待....

我有两个实体,我需要建模为类,称为父和子(它足够接近实际的问题域).一位家长将有一个或多个孩子 - 在这个申请中,我对没有孩子的父母没有兴趣.

我的大脑出去吃午饭的地方是我需要能够找到另一个.在我的数据库中,我可以使用正常的外键关系实现它,并且SQL的基于集合的特性使得查找给定父项的所有子项或给定子项的父项变得容易.但作为对象......?

认为家长应携带儿童的集合(列表,无论如何).我还认为每个孩子都应该提及其父母.然而,参考文献的循环性质让我头疼.

我是:

  • 在正确的轨道上?
  • 完全离开基地?如果是这样,我该怎么办?

这几乎肯定会在VB.NET中实现,但我还是可以通过切割代码来实现.

8个答案后编辑:

谢谢大家.很难选择一个接受的答案.

澄清答案中提出质疑的几件事:

  • 父和子是非常不同的实体 - 根本没有继承关系.我选择了我所做的名字,因为它们真的非常接近真实世界的问题领域,现在看来它是从OO角度来看混淆的根源.
  • 层次结构只有一层深度 - 孩子们永远不会在应用程序中拥有子级.

再次感谢.

oop tree class-design data-structures

15
推荐指数
2
解决办法
3185
查看次数