【问题标题】:Is it possible to instantiate a class using initialization list and call a method, all in single command?是否可以在单个命令中使用初始化列表实例化一个类并调用一个方法?
【发布时间】:2019-04-19 21:45:52
【问题描述】:

我想使用初始化列表实例化一个对象,并在同一命令中调用一个方法。

string importantData = SearchOptions() {id = "10", className = "Fluffy"}.justAFunction();

类如下所示:

class SearchOptions : PageBase
{
    public SearchOptions()
    {
        id = string.Empty;
        className = string.Empty;
        text = string.Empty;
        partialText = string.Empty;
        XPath = string.Empty;
        cssModifier = string.Empty;
    }

    string void justAFunction()
    {
        Console.WriteLine(id);
        Console.WriteLine(className);
        return "ImportantReturn";
    }
}

我想保持使用初始化列表定义必要字段的灵活性,并将其他字段留空。

以后不需要类对象。只需要方法的返回参数。

【问题讨论】:

  • 是的,但您可能需要一个静态方法。

标签: c# object constructor


【解决方案1】:

替换 "string void justAFunction()" => "public string justAFunction()"。

【讨论】:

  • 虽然这是一个很好的建议并修复了编译错误,但它不能回答问题,因此应该作为评论而不是答案。
【解决方案2】:

你几乎拥有它。您只需要添加new 关键字来创建一个新对象,然后就可以对其调用方法:

string importantData = new SearchOptions {id = "10", className = "Fluffy"}.justAFunction();

由于您没有对新创建的对象设置任何引用,因此一旦执行此行,它就会超出范围,并将被垃圾回收引擎清理。


请注意,您的代码还有一些其他问题需要修复才能使其正常工作:

  1. justAFunction() 应该可以公开访问(在您的示例中,未指定访问修饰符,默认为 private,因此它不起作用)。
  2. 您不能指定两种返回类型(您将其声明为:string void justAFunction。您应该删除void,因为您要返回一个字符串)。

还有其他一些建议:

  1. 这假定基类包含您正在设置的属性(或者它们存在于此类中,而您只是为了简洁而忽略了它们)
  2. 您在实例化对象时设置的属性必须是可公开访问的(或者至少可以从您创建它的任何位置访问 - 通常它们是 public)。
  3. 公共属性和方法应该是PascalCase(而不是camelCase)。

考虑到这些建议,您的课程将如下所示:

class PageBase
{
    public string Id { get; set; }
    public string ClassName { get; set; }
    public string Text { get; set; }
    public string PartialText { get; set; }
    public string XPath { get; set; }
    public string CssModifier { get; set; }
}

class SearchOptions : PageBase
{
    public SearchOptions()
    {
        Id = string.Empty;
        ClassName = string.Empty;
        Text = string.Empty;
        PartialText = string.Empty;
        XPath = string.Empty;
        CssModifier = string.Empty;
    }

    public string JustAFunction()
    {
        Console.WriteLine(Id);
        Console.WriteLine(ClassName);
        return "ImportantReturn";
    }
}

然后获取重要数据的调用如下所示:

string importantData = new SearchOptions {Id = "10", ClassName = "Fluffy"}.JustAFunction();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多