gpt4 book ai didi

c# - 构造函数链接传递参数的计算值

转载 作者:太空狗 更新时间:2023-10-29 22:16:20 25 4
gpt4 key购买 nike

如何从一个实例化器传递到另一个实例化器?假设我们有这个类。如何从 foo(string, string) 传递到 foo(Uri)?

public foo
{
string path { get; private set; }
string query { get; private set; }

public foo (Uri someUrl)
{
// ... do stuff here
}

public foo (string path, string query)
{
Uri someUrl = new Uri(String.Concat(path, query);

// ... do stuff here to pass thru to foo(someUrl)
}
}

最佳答案

对于简单的构造函数链,您可以使用特殊关键字thisbase 来引用当前类或父类的其他构造函数。您可以将执行构造函数的任何参数用作链式构造函数的参数,并且可以使用任何合法的单个表达式 组合它们。这基本上与适用于提供给函数调用的任何其他内联表达式的规则相同,只是您应该避免使用该类的任何成员(因为它尚未构造)并将您自己限制为常量和传递参数:

public foo (Uri someUrl)
{
this.url = someUrl;
}

public foo (string path, string query)
: this(new Uri(String.Concat(path, query)))
{
// this.url is now set and available.
}

只要您需要执行的处理可以在单值表达式中完成,这就可以工作。例如,如果您需要在将 Uri 发送给其他构造函数之前对其执行其他操作,或者如果您需要一些复杂的 if/then 逻辑,您将无法摆脱这种技术。另一种方法是将您的代码重构为初始化方法:

public foo (Uri someUrl)
{
this.init(someUrl);
}

public foo (string path, string query)
{
var url = String.Concat(path, query);
url = url.Replace("http://", "https://");

this.init(url);
}

private void init (Uri someUrl)
{
this.url = someUrl;
}

关于c# - 构造函数链接传递参数的计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17266048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com