在C++模板中,可以指定某个类型参数是默认值.即除非明确指定,否则它将使用类型T.
可以用C#完成或近似吗?
我正在寻找类似的东西:
public class MyTemplate<T1, T2=string> {}
Run Code Online (Sandbox Code Playgroud)
这样一个没有明确指定的类型的实例T2
:
MyTemplate<int> t = new MyTemplate<int>();
Run Code Online (Sandbox Code Playgroud)
基本上是:
MyTemplate<int, string> t = new MyTemplate<int, string>();
Run Code Online (Sandbox Code Playgroud)
最后,我正在研究一个案例,其中有一个相当广泛使用的模板,但我正在考虑使用其他类型参数进行扩展.我想,我可以继承,但我很好奇是否还有其他选择.
我希望能够做到以下几点:
Func<int,bool> tryMethodFunc = TryMethod;
Run Code Online (Sandbox Code Playgroud)
TryMethod的签名如下:
bool TryMethod(int value, int value2 = 0, double value3 = 100.0)
Run Code Online (Sandbox Code Playgroud)
我并不反对将方法分解为一种curry格式,但如果没有这种方法可以做到这一点,那将会更有效.
为什么不可能执行以下操作:
Func<int, int, int> sum = delegate(int x, int y = 20) { return x + y; };
Action<string, DateTime> print =
delegate(string message, DateTime datetime = DateTime.Now)
{
Console.WriteLine(message);
};
sum(x: 20, y: 40);
print(datetime: DateTime.Now, message: "Hello");
Run Code Online (Sandbox Code Playgroud)
只有命名参数的情况:
Func<int, int, int> sum = delegate(int x, int y) { return x + y; };
Action<string, DateTime> print =
delegate(string message, DateTime datetime)
{
Console.WriteLine("{0} {1}", message, datetime);
};
Console.WriteLine(sum(y: 20, x: 40));
print(datetime: DateTime.Now, message: "Hello");
Run Code Online (Sandbox Code Playgroud)
只有可选参数的情况:
Func<int, int, …
Run Code Online (Sandbox Code Playgroud) 我有一个目前看起来像这样的课程:
public Action<string> Callback { get; set; }
public void function(string, Action<string> callback =null)
{
if (callback != null) this.Callback = callback;
//do something
}
Run Code Online (Sandbox Code Playgroud)
现在我想要的是采用一个可选参数,如:
public Action<optional, string> Callback { get; set; }
Run Code Online (Sandbox Code Playgroud)
我试过:
public Action<int optional = 0, string> Callback { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是行不通的。
有没有办法允许Action<...>
采用一个可选参数?