【发布时间】:2017-01-31 05:51:32
【问题描述】:
我正在尝试为自己制作一个日志插件,我希望有一个方法可以用不同的参数对其进行重载。
关键是,它需要可以添加多个字符串,我将在不同的行上打印。我喜欢使用params 的想法,这样我就不需要每次都添加string[] { strings here }。
我目前遇到的问题是Log.L()方法不会触发第一种,而是第二种方法,这有点道理。
我怎样才能解决这个问题,同时保留params?
Log.L("line1", "line2", "line3");
public static class Log
{
public static void L(params string[] message)
{
Write(LogType.Log, message);
}
public static void L(string location, params string[] message)
{
Write(LogType.Log, message, false, location);
}
}
【问题讨论】:
-
只是不同的方法命名。没有人说你必须使用方法重载;主要是为了方便。
-
我同意,但是重载看起来好多了。在应用这个之前,我想看看其他解决方案弹出^^
-
顺便说一句...
L无论如何都不是一个很好的方法名称。更具描述性的东西会更好。 -
嗯,我从 Android Studio 得到了这个想法。他们使用 L 进行日志记录,使用 D 进行调试等。不过我喜欢这个想法。它所需要的只是一些好的文档,对吧? :D
-
Rory 的建议是正确的。没有办法强制编译器使用其他方法。它将始终选择“public static void L(string location, params string[] message)”,因为它是最具体的。所以,你需要消除歧义。您可以使用不同的类型(例如,位置真的是枚举吗?路径?),不同的方法名称,或者只保留一个方法。但老实说,我不明白为什么 params 在这里有用。 StringBuilder 易于使用,轻量级,并且很清楚发生了什么。
标签: c# overloading args