【问题标题】:Calling function in the constructor C#在构造函数 C# 中调用函数
【发布时间】:2015-03-17 10:55:51
【问题描述】:

我有类CategoryPage,在某些区域称为navigationHelper_loadState,有一个函数称为clickeditem,带有一个参数

        public void clickeditem(ItemClickEventArgs Args)
    {
        function = Args.ClickedItem.ToString();
    }

函数是public static string function;

当我尝试在构造函数中调用clickeditem 时,

它需要参数(ItemClickEventArgs Args),当我发送给构造函数时它变成了Null。 我试图创建另一个构造函数,或者只是从另一个公共类调用但我失败了

你能帮帮我吗?

【问题讨论】:

  • 如果没有Args,您的代码根本无法工作,因为方法体依赖于它。在没有这个参数的情况下,期望该方法做什么?
  • 是的,你是绝对正确的,所以我的意思是如何在构造函数中调用这个函数而不传递这个特定函数的参数期望
  • 这个函数是一个事件处理器。通常不直接调用事件处理程序。如果你想执行相同的代码,那么(为了避免重复)这段代码可以移动到单独的方法中,从事件处理程序或其他地方调用。跨度>

标签: c# wpf data-binding windows-store


【解决方案1】:

如果方法没有为参数提供默认值(通过重载或在参数列表中指定),则调用者必须提供该值。没有例外。

在您的问题中,当调用者没有要传递的 Args 对象时,您甚至不清楚您期望将 function 字段设置为什么。但为了争论起见,假设您有一些 string 的价值。

那么你应该改变你的代码,让它看起来更像这样:

public void clickeditem(ItemClickEventArgs Args)
{
    SetFunctionFieldValue(Args.ClickedItem.ToString());
}

private void SetFunctionFieldValue(string text)
{
    function = text;
}

然后你可以从你的构造函数中调用相同的方法:

public CategoryPage()
{
    SetFunctionFieldValue("some field value");
}

当然,我会注意到实际行为是微不足道的:您只是在设置一个字段的值。所以在我看来,另一种选择可能是简单地在构造函数中设置字段值:

public CategoryPage()
{
    function = "some field value";
}

然后你可以不理会事件处理方法。

如果您甚至没有将string 值分配给function 字段,那么我不知道您实际要求做什么。在您的示例中,所有 clickeditem() 方法所做的都是设置该字段,那么如果您没有考虑将该字段设置为的值,为什么还要从构造函数中调用它呢? :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2021-11-23
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多