首页 文章

在将类声明为抽象时,创建“抽象”类成员的最佳方法是什么?

提问于
浏览
0

有一个类我想要创建为抽象但我不能,因为该类的基类是ActiveReports,一旦我使它抽象,子报告就不再可设计了 . (有趣的是,基类本身是可设计的,但不是它的孩子) .

我知道,如果没有先将类声明为抽象类,我就无法将类成员声明为抽象类 .

在这种情况下,NEXT BEST的方法是什么 . 此时,我将成员设为虚拟成员并为每个成员添加了评论 . 在有意义的地方我也宣布成员是受保护的而不是公开的 . 但是还有一些其他最好的方法需要在编译时而不是运行时覆盖这些成员吗?

如果你在这种情况下你会怎么做?

EDIT

让我进一步解释 . 我可以创建一个继承自ActiveReports的类(让我们称之为MyReportsBase) . (我使用add new并选择ActiveReports类型)然后,ActiveReports在MyReportsBase(在设计时属性中)提供名为MasterClass的报表对象的属性 . 一旦我将该属性设置为true,我就可以创建新报告并从MyReportsBase继承,而不是直接从ActiveReports继承 . (你这样做的方法是通过create添加新的ActiveReports,然后编辑代码隐藏中的代码以继承MyReportsBase而不是ActiveReports) .

这一切都很好,而且一切都很好 . 但是,我的要求是MyUpwardBase必须被继承(用一些抽象成员声明为abstract) . 我可以进入代码隐藏并在基类上设置abstract修饰符 . 即便如此,我也可以设计MyReportsBase . 但是,此时,我从MyReportsBase继承的所有报告都不再可设计 . 尝试在设计器中打开派生报表会引发设计器无法打开基类的错误,因为它被声明为抽象 .

所有这一切都只是为了澄清这个问题 . 现在,界面建议对我来说是最有意义的 .

EDIT 2
出于这个原因,接口并没有真正为我做这件事 . 基类"abtract-but-aren't-abstract"成员必须存在于我的基类中,因为我有依赖它们的虚拟和公共成员 . 在我的情况下,因为我不能将类声明为抽象,所以我必须为这些成员实现一个实现 .

只要我为这些成员提供实现,那么我的所有继承类也都有实现,并且接口在编译时不会抱怨 . 我想通过从编译器需要它们的那些成员中删除虚拟修饰符但是它没有那样做 .

我开始认为我的解决方案(记录好成员)是最好的解决方案 .

2 回答

  • 0

    为什么抽象类的基类也具有不可设计的基类?

    public class Base
    {
        public int SomeInt { get; set; }
    }
    
    public abstract class BaseChild : Base
    {
        public abstract string Value { get; set; }
    }
    
    public class ChildChild : BaseChild
    {
        public override string Value { get; set; }
    }
    

    作品 . 还是我误解了?

    var child = new ChildChild { SomeInt = 3, Value = "asd" };
    
  • 0

    你不想用 interface

    class A: ActiveReport
    {
        // some public methods to share between all childs
    }
    
    interface IReport
    {
        // some required method
    }
    
    Class B: A, IReport
    {
    } 
    
    Class C: A, IReport
    {
    }
    .
    .
    .
    

相关问题