C#4.0 приносит дополнительные параметры, которых я ожидал в течение достаточно долгого времени. Однако кажется этим, потому что только Системные типы могут быть const
, Я не могу использовать класс/структуру, который я создал как дополнительный параметр.
Есть ли некоторый путь, который позволяет мне использовать более составной тип в качестве дополнительного параметра. Или эти из фактов то, что нужно просто жить с?
Лучшее, что я мог придумать для справки types было:
using System;
public class Gizmo
{
public int Foo { set; get; }
public double Bar { set; get; }
public Gizmo(int f, double b)
{
Foo = f;
Bar = b;
}
}
class Demo
{
static void ShowGizmo(Gizmo g = null)
{
Gizmo gg = g ?? new Gizmo(12, 34.56);
Console.WriteLine("Gizmo: Foo = {0}; Bar = {1}", gg.Foo, gg.Bar);
}
public static void Main()
{
ShowGizmo();
ShowGizmo(new Gizmo(7, 8.90));
}
}
Вы можете использовать ту же идею для структур, сделав параметр допускающим значение NULL:
public struct Whatsit
{
public int Foo { set; get; }
public double Bar { set; get; }
public Whatsit(int f, double b) : this()
{
Foo = f; Bar = b;
}
}
static void ShowWhatsit(Whatsit? s = null)
{
Whatsit ss = s ?? new Whatsit(1, 2.3);
Console.WriteLine("Whatsit: Foo = {0}; Bar = {1}",
ss.Foo, ss.Bar);
}
Вы можете использовать любой тип в качестве необязательного параметра:
using System;
class Bar { }
class Program
{
static void Main()
{
foo();
}
static void foo(Bar bar = null) { }
}
Хорошо, я перечитал ваш вопрос и Думаю, я понимаю, что вы имеете в виду - вы хотите иметь возможность делать что-то вроде этого:
static void foo(Bar bar = new Bar()) { }
К сожалению, это недопустимо, поскольку значение параметра по умолчанию должно быть известно во время компиляции, чтобы компилятор мог запечь его в сборка.