1. динамическийExpandoObject
Друзья, знакомые с js, знают, что js можно написать так:
просмотреть исходный текст? 1 var t = новый объект ();
2 t.Abc = 'что-то';
3т.Значение = 243;
Теперь мы также можем использовать эту функцию динамического языка js в C# при условии, что переменная объявлена как тип ExpandoObject. Например:
просмотреть исходный код?1 static void Main(string[] args)
2 {
3 динамический t = новый ExpandoObject();
4 т.Abc = «abc»;
5т.Значение = 10000;
6 Console.WriteLine("t abc = {0}, t value = {1}", t.Abc, t.Value);
7 Консоль.ReadLine();
8}
Для поддержки этого приложения в C# 4.0 было добавлено новое пространство имен System.Dynamic. Я не уверен, в чем смысл этого использования. Это также пробный переход C# к динамическому языку.
2. Общее автоматическое преобразование
До C# 4.0 следующий код невозможно было скомпилировать.
просмотреть исходный отпечаток?1 IEnumerable
2 «Я 0», «Я 1», «Я 2»
3};
Однако в C# 4.0 такое объявление разрешено, но ограничено универсальными интерфейсами. Подобные методы для универсальных типов не разрешены. В следующем коде возникает ошибка компиляции.
просмотреть исходный отпечаток?1 List
2 «Я 0», «Я 1», «Я 2»
3};
3. Необязательные параметры параметров метода: синтаксис объявления метода.
просмотреть sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
Этот метод имеет три параметра: первый — обязательный, второй и третий — необязательные, и все они имеют значения по умолчанию. Эта форма полезна для нескольких перегрузок методов с фиксированными параметрами.
Вызывается следующим образом:
просмотреть исходный код?1 static void Main(string[] args)
2 {
3 Сделать Что-нибудь(1);
4 DoSomething(1, «Тыква»);
5 DoSomething(1, «Тыква», «Огурец»);
6 Консоль.ReadLine();
7}
Может быть, вы подумаете: если у меня есть метод с той же сигнатурой, что и у метода с необязательным параметром, но без выбора параметра, как C# с ним справится?
просмотреть исходный код?1 static void DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
Я перегрузил другой метод DoSomething. У этого метода есть два параметра, но нет дополнительных параметров. Эксперименты доказали это.
При DoSomething(1,"arg") первыми будут выполняться методы без необязательных параметров.
4. Именованные параметры параметров метода Именованные параметры позволяют нам присваивать значения параметров, указывая имена параметров при вызове метода. В этом случае порядок параметров можно игнорировать. Следующее объявление метода:
просмотреть исходный отпечаток? 1 static void DoSomething (int height, int width, string openerName, string прокрутка) {
2 Console.WriteLine("height = {0},width = {1},openerName = {2}, прокрутка = {3}",height,width,openerName,scroll);
3}
Мы можем вызвать метод, объявленный выше, вот так
просмотреть исходный код?1 static void Main(string[] args)
2 {
3 DoSomething (прокрутка: «нет», высота: 10, ширина: 5, имя открывателя: «имя окна»);
4 Консоль.ReadLine();
5}
Очевидно, что это синтаксический сахар, но он имеет смысл, когда имеется много параметров метода и может повысить читаемость кода.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html