C# 从TextBoxBase继承

C# 从TextBoxBase继承,c#,winforms,C#,Winforms,我正在处理一个库(.dll)文件,我想创建一个名为FatherTextBox的自定义文本框,所以我从TextBoxBase(一个抽象类)派生开始 对自定义逻辑进行编码后,我注意到我收到了以下错误消息: The type 'System.Windows.Forms.TextBoxBase' has no constructors defined 所以我想这不是一个选择: public FatherTextBox() : base() { } 我的问题是: 没有构造函数

我正在处理一个库(.dll)文件,我想创建一个名为FatherTextBox的自定义文本框,所以我从TextBoxBase(一个抽象类)派生开始

对自定义逻辑进行编码后,我注意到我收到了以下错误消息:

The type 'System.Windows.Forms.TextBoxBase' has no constructors defined
所以我想这不是一个选择:

    public FatherTextBox() : base()
    {

    }
我的问题是:

  • 没有构造函数从抽象类继承的方法是什么
  • 为什么TextBoxBase没有构造函数
  • 发件人:

    您通常不会从TextBoxBase继承。创建自己的文本 控件类,从TextBox或RichTextBox继承

    TextBoxBase
    有一个
    内部
    构造函数,这就是为什么不能调用它。

    试试这个

       class Txt:TextBox
    
        {
            public Txt():base()
            {
    
            }
        }
    

    查看
    TextBoxBase
    类的源代码,有两个构造函数:

    internal TextBoxBase()
    {
        base.SetState2(2048, true);
        this.textBoxFlags[TextBoxBase.autoSize | TextBoxBase.hideSelection | TextBoxBase.wordWrap | TextBoxBase.shortcutsEnabled] = true;
        base.SetStyle(ControlStyles.FixedHeight, this.textBoxFlags[TextBoxBase.autoSize]);
        base.SetStyle(ControlStyles.UserPaint | ControlStyles.StandardClick | ControlStyles.StandardDoubleClick | ControlStyles.UseTextForAccessibility, false);
        this.requestedHeight = base.Height;
    }
    

    第一个构造函数是内部的,因此只有定义该类型的同一程序集才能访问它。第二个是静态构造函数,在类的第一次访问时调用

    现在回答您的问题:

  • 如果抽象类没有构造函数,则不打算将其用于继承。 还有其他类别,如
    TextBox
    RichTextBox
    ,可满足您的需要

  • 类的架构师
    TextBoxBase
    为所有具有通用OOP原则的文本框设计了一个文本框库:封装。封装简而言之就是隐藏复杂类型的实现细节。而且
    TextBoxBase
    非常复杂


  • 所以不可能从TextBoxBase继承吗?@samy正确。继承自
    TextBox
    RichTextBox
    ,或其他类似于您想要的东西。好的,我会这样做的,谢谢:)但我想知道,如果我们不能使用它,为什么他们会创建TextBoxBase?nvm我现在明白了,是microsft个人使用的。看我的帖子,为什么您不能使用它。
    static TextBoxBase()
    {
        // Note: this type is marked as 'beforefieldinit'.
        TextBoxBase.autoSize = BitVector32.CreateMask();
        TextBoxBase.hideSelection = BitVector32.CreateMask(TextBoxBase.autoSize);
        TextBoxBase.multiline = BitVector32.CreateMask(TextBoxBase.hideSelection);
        TextBoxBase.modified = BitVector32.CreateMask(TextBoxBase.multiline);
        TextBoxBase.readOnly = BitVector32.CreateMask(TextBoxBase.modified);
        TextBoxBase.acceptsTab = BitVector32.CreateMask(TextBoxBase.readOnly);
        TextBoxBase.wordWrap = BitVector32.CreateMask(TextBoxBase.acceptsTab);
        TextBoxBase.creatingHandle = BitVector32.CreateMask(TextBoxBase.wordWrap);
        TextBoxBase.codeUpdateText = BitVector32.CreateMask(TextBoxBase.creatingHandle);
        TextBoxBase.shortcutsEnabled = BitVector32.CreateMask(TextBoxBase.codeUpdateText);
        TextBoxBase.scrollToCaretOnHandleCreated = BitVector32.CreateMask(TextBoxBase.shortcutsEnabled);
        TextBoxBase.setSelectionOnHandleCreated = BitVector32.CreateMask(TextBoxBase.scrollToCaretOnHandleCreated);
        TextBoxBase.EVENT_ACCEPTSTABCHANGED = new object();
        TextBoxBase.EVENT_BORDERSTYLECHANGED = new object();
        TextBoxBase.EVENT_HIDESELECTIONCHANGED = new object();
        TextBoxBase.EVENT_MODIFIEDCHANGED = new object();
        TextBoxBase.EVENT_MULTILINECHANGED = new object();
        TextBoxBase.EVENT_READONLYCHANGED = new object();
    }