Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
using System;
using System.Xml;
class Program
{
private static void Main()
{
Bar(XmlWriter => XmlWriter.Flush());
Bar(XmlReader => XmlReader.Flush());
}
private static void Bar(Action<XmlWriter> x)
{
Console.WriteLine("W");
}
private static void Bar(Action<XmlReader> x)
{
Console.WriteLine("R");
}
}
namespace Foo {
public static class Bar {
public static void Do() {
System.Console.WriteLine("ClassLibrary1");
}
}
}namespace Foo {
public static class Bar {
public static void Do() {
System.Console.WriteLine("ClassLibrary2");
}
}
}extern alias ClassLibrary1;
extern alias ClassLibrary2;
public class Program {
public static void Main() {
ClassLibrary1.Foo.Bar.Do();
ClassLibrary2.Foo.Bar.Do();
}
}public delegate void ActionWithRef(ref int value);ActionWithRef action = (ref int value) => { i = i++; };private void Do()
{
int i = 0;
i += Increment(ref i);
Console.WriteLine(i);
}
private int Increment(ref int i)
{
return i++;
}
Но нет, постфиксная форма инкремент приведёт к тому что мы уйдём из метода до того как изменим переменнуюПочему тогда, если мы перепишем вот так:
private static int Increment(ref int i)
{
int r = i++;
return r;
}, то получим тот же результат?int i = 0;
int j = Increment(ref i);
i += j;, то уже получим единицу?i += Increment(ref i); по сути превращается в i += 0;. Но ведь внутри Increment мы уже увеличили i. Получается, что к i, равному 1, мы добавляем 0. Должно получиться 1.i += Increment(ref i); превращается в i = i + Increment(ref i); который, в свою очередь, вычисляется слева направо. Поэтому компьютер успевает «прочитать» i до того, как вызовет Increment. Но в любом случае, лучше так не делать.IMHO по-моему нужны расписанные ответы с объяснением, а не ссылаться мол сами разбирайтесь.
10 простых задач на c# с подвохом