Кто-то может объяснить это мне, какое закрытие находится на реальном простом языке? [дубликат]

Используйте ReferenceEquals. От форумы MSDN :

public static bool operator ==(Foo foo1, Foo foo2) {
    if (ReferenceEquals(foo1, null)) return ReferenceEquals(foo2, null);
    if (ReferenceEquals(foo2, null)) return false;
    return foo1.field1 == foo2.field2;
}

11
задан Community 23 May 2017 в 12:33
поделиться

9 ответов

Я бы сказал, что это дубликат: Что такое «замыкания» в .NET?

«По сути, замыкание - это блок кода, который может быть выполнен позже, но который поддерживает среду, в которой он был впервые создан, т.е. он все еще может использовать локальные переменные и т. д. метода, который его создал, даже после того, как этот метод завершил выполнение ».

20
ответ дан 3 December 2019 в 00:46
поделиться

Ваша обувь в холле; твой куртка находится на кухне. Положи их на, и ваши перчатки (они в ящик), выходя на улицу.

Теперь вы можете играть со своими машинами. В одиннадцать часов вы должны пойти купить хлеб в угловом магазине.

Малыш играет. Забывает весь мир.

Будильник срабатывает; Малыш видит: одиннадцать часов! О, выйди на улицу, чтобы купить хлеба, используя затвор для выхода на улицу.

12
ответ дан 3 December 2019 в 00:46
поделиться

Мне нравится пример Google для Javascript (вы можете изменить его для C # легко). Это не то, что поймет пятилетний ребенок, но я сомневаюсь, что средний пятилетний ребенок поймет, что это за функция.

/*
* When a function is defined in another function and it
*    has access to the outer function's context even after
*    the outer function returns
* An important concept to learn in Javascript
*/

function outerFunction(someNum) {
  var someString = 'Hai!';
  var content = document.getElementById('content');
  function innerFunction() {
    content.innerHTML = someNum + ': ' + someString;
    content = null; // IE memory leak for DOM reference
  }
  innerFunction();
}
10
ответ дан 3 December 2019 в 00:46
поделиться

Если бы пятилетний ребенок знал C #, я бы объяснил это с помощью этого примера кода:

int i = 0;
string result = null;
Action iExaminer = () =>
{
  result = i % 2 == 1 ? "Odd" : "Even";
};
i = 1;
iExaminer();
Console.WriteLine(result);

Если бы пятилетний ребенок изучал linq, я бы объяснил с помощью этого примера кода:

string name = null;
IEnumerable<Customer> query = Customers.Where(c => c.Name == name);
name = "Bob";
 // query is resolved when enumerated (which is now)
 // Where will now call our anonymous method.
foreach(var customer in query)
{
  Console.WriteLine(customer.Name);
}
4
ответ дан 3 December 2019 в 00:46
поделиться

Замыкание (информатика) говорит:

В информатике замыкание - это функция первого класса со свободными переменными, которые связаны в лексической среда.

Перевод:
Замыкания закрывают / присоединяют переменные вокруг функции, чтобы эту функцию можно было телепортировать в другое место и по-прежнему использовать эти переменные например, предположим, что вы телепортировались в удаленное место, но у вас все еще есть доступ к вашей кружке в гробу, лежащей на вашем столе

Пример:

function makefunc(x)
{
    return function(){return x}
}

Теперь, используя makefunc, вы можете создавать множество анонимных функций, которые будут возвращать то, что вы передали makefunc

Так что, если вам нужна функция, которая возвращает 10, используйте makefunc (10) (), хотя довольно бесполезный способ вернуть 10 :)

2
ответ дан 3 December 2019 в 00:46
поделиться

Когда вы знаете, как что-то делать в целом, вы можете указать некоторые (или все) детали и получить закрытие .

Например, вы знаете, как купить мороженое. Вы знаете, что делать, если будете напротив любого магазина. Но если вы хотите пойти в конкретный магазин (например, из-за воскресной скидки), вы выходите из дома, чтобы купить там мороженое . «Купи мороженого в магазине на углу» - это закрытие «купи мороженого». По сути, все это закрытие типа «купи где-нибудь мороженого»:

  • Купи мороженого на углу
  • Купи два мороженого
  • Купи два мороженого на углу

А теперь иди поиграй с друзьями, сынок! (и я не забываю не говорить ничего подобного перед детьми)

0
ответ дан 3 December 2019 в 00:46
поделиться

Если вам действительно нужно сохранять простоту, то замыкание - это функция со своим контекстом . Функция в замыкании по-прежнему может обращаться к тем же переменным, которые были при ее определении, независимо от того, откуда вы ее вызываете. (В Lua это называется upvalues ​​, что я считаю очень описательным термином.)

Я впервые познакомился с концепцией в Lua, и это определение помогло мне понять концепцию. Может быть, взгляните на Lua: его простота и мощь завораживают и, безусловно, помогают развить определенный взгляд на другие языки. Его концепция замыканий была бы хорошим примером этого.

независимо от того, откуда вы это называете. (В Lua это называется upvalues ​​, что я считаю очень описательным термином.)

Я впервые познакомился с концепцией в Lua, и это определение помогло мне понять концепцию. Может быть, взгляните на Lua: его простота и мощь завораживают и, безусловно, помогают развить определенный взгляд на другие языки. Его концепция замыканий была бы хорошим примером этого.

независимо от того, откуда вы это называете. (В Lua это называется upvalues ​​, что я считаю очень описательным термином.)

Я впервые познакомился с концепцией в Lua, и это определение помогло мне понять концепцию. Может быть, взгляните на Lua: его простота и мощь завораживают и, безусловно, помогают развить определенный взгляд на другие языки. Его концепция замыканий была бы хорошим примером этого.

5
ответ дан 3 December 2019 в 00:46
поделиться

Приведенный ниже ответ относился к исходной формулировке, которая была сродни «Как объяснить закрытие пятилетнему ребенку».

Возьми коробку с лего; Постройте себе симпатичный маленький космический корабль. Когда вы идете к дому Билли и приносите туда свое ремесло; с крышками вы можете по-прежнему использовать все части из вашей коробки с лего, даже если коробка была оставлена ​​ в вашей спальне.

8
ответ дан 3 December 2019 в 00:46
поделиться

Это простой подход к идее C #: Замыкание

0
ответ дан 3 December 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: