繁体   English   中英

是否可以在基本构造函数中使用硬编码的值?

[英]Is it possible to use hard-coded values in a base constructor?

我需要从一个基类继承,该基类的一种方法具有一个带有8个参数的构造函数。

我永远不需要全部8个参数,而只需要一个。 但是,我确实需要实现该方法。

public MyClass : BaseClass
{    
    public class MyClass(string myArg):base(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
    {
         // do stuff
    }
}

导致产生史诗般的失败编译器消息,其中args2-8被硬编码。 有什么提示吗?

澄清:参数是基类的所有属性,都是通过此初始化设置的。

由于基类是框架类,因此我无法修改其属性或构造函数。

希望对那些想知道参数是什么的人(以及不,开头大括号不是问题,无论如何,谢谢)的最终编辑,这是我试图作为自定义成员资格提供程序的一部分移植的VB.NET代码。

可悲的是,不可能找到C#成员资格提供者的en示例。

Public Sub New(ByVal userName As String)
            MyBase.New("Shiningstar.SSSMembershipProvider", userName, _
            userName.GetHashCode, userName, "", "", False, False, Today, _
            Today, Today, Today, Today)

            Me.m_UserName = userName ' UserName() is read only
End Sub

在这种情况下,基类为System.Web.Security.MembershipUser

我从未听说过方法构造函数,因此我假设您是指普通的构造函数。 您应该能够对其中的一些参数进行硬编码。这是一个无错误编译的小代码示例:

public class MyBaseClass
    {
        public MyBaseClass ( int arg2, string arg1,string ar3)
        { }
    }

    public class MyClass : MyBaseClass
    {
        public MyClass (int argument) : base (argument, "not supplied", "hard-coded") 
        { }

    }

我希望这回答了你的问题。

编辑(一些绊脚石:)


您确定您具有正确的访问修饰符(受保护的,内部的,私有的,公共的,受保护的内部)吗?

如果没有确切的错误消息,则不能确定,但​​是我怀疑您的arg1 .. arg8是该类的实例字段,不能在基本构造函数之前使用。

如果将它们设置为静态字段,则将解决该问题。

在这里疯狂猜测。 您是否在类声明中缺少class关键字的问题?

public class MyClass : BaseClass
{
    public MyClass(string myArg):base(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
    {
         // do stuff
    }
}

并且,根据您在“执行任务”中的操作,可能会丢弃myArg ...,但这可能不是您的问题。

您能给我们更多关于arg2-arg8是什么的信息吗?

可以传递给基类构造函数的值的类型受到限制。 例如,您不能传递实例字段或属性。 常量,构造函数参数和文字应该没问题。

如果要将基类或当前类的属性用作构造函数的参数,则这些属性必须是静态的。 我猜您得到的错误是关于“此引用未初始化”或类似的内容。 对于任何将返回值然后用作参数的方法,情况也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM