[英]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.