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

时间:2009-06-14 13:09:47

标签: c# inheritance

我需要从基类继承,其中一个方法的构造函数有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

5 个答案:

答案 0 :(得分:3)

我从来没有听说过方法构造函数,所以我假设你的意思是一个普通的构造函数。您应该能够对一些参数进行硬编码。这是一个编译无错误的小代码示例:

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") 
        { }

    }

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

编辑(一些绊脚石:)


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

答案 1 :(得分:2)

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

如果你将它们设为静态字段,那么问题就会解决。

答案 2 :(得分:1)

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

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

根据你在“做事”中所做的事情,你可能会丢掉你的myArg ......但这可能不是你的问题。

答案 3 :(得分:1)

您能否提供一些关于arg2-arg8的更多背景信息?

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

答案 4 :(得分:1)

如果要使用基类或当前类的属性作为构造函数的参数,那么这些属性必须是静态的。我猜你得到的错误是关于“这个引用没有初始化”或类似的东西。任何返回值然后用作参数的方法都是如此。