是否有可能在基础构造函数中使用硬编码值?
我需要从一个基类继承,其中的一个方法有一个带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#会员供应商的例子是不可能的。
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
没有确切的错误消息,我不能确定,但我怀疑你的arg1 .. arg8是类的实例字段,它不能在基础构造函数之前使用。
如果你让它们成为静态字段,那么问题就解决了。
我从来没有听说过的方法构造的,所以我想你说的是正常的构造函数。你应该能够硬编码中的一些参数的下面是没有错误编译一个小的代码示例:
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")
{ }
}
我希望这回答了你的问题。
编辑(有些蹒跚的石头:)
你确定你有正确的访问修饰符(受保护的,内部的,私人的,公共的,受保护的内部)?
野猜在这里。问题是您在类声明中丢失了class
关键字?
public class MyClass : BaseClass
{
public MyClass(string myArg):base(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
{
// do stuff
}
}
,并根据你在“做的东西”做什么,你可能会被扔掉你myArg
...但是这可能不是你的问题。
你可以给我们更多关于arg2-arg8的内容吗?
可以传递给基类构造函数的值的类型有限制。例如,你不能传递实例字段或属性。常量,构造函数参数和文字应该没问题。
如果要使用基类或当前类的属性作为构造函数的参数,那些属性需要是静态的。我猜你得到的错误是关于“这个参考没有初始化”或类似的东西。任何会返回值然后用作参数的方法也是如此。
当然。发布(至少)错误消息。和基类的构造函数的签名。 – 2009-06-14 13:13:56
你得到的错误信息是什么?你可以粘贴BaseClass和MyClass构造函数定义吗? – NilObject 2009-06-14 13:14:54
Mayb您应该向我们展示真实的代码,以便我们可以看到wat arg1-8是哪里以及它们来自哪里。 – 2009-06-14 13:38:00