C# delegate slog
C#μ delegateμ λν΄ κ³ μ°°νκ³ λ€μν μ¬λ‘μ λν΄μ μμλ΄ λλ€.
delegateλ?
C#μ delegateλ λ©μλλ₯Ό μ°Έμ‘°νλ λ³μμ΄λ©°, μ°Έμ‘°ν λ³μμ΄κΈ° λλ¬Έμ nullλλ λ©μλ μ°Έμ‘°κ° λ΄κΈΈ μ μμΌλ©°, μ»΄νμΌ νμ λ μΈμ λ° λ°ν νμ κ²μ¬ν©λλ€.
delegateλ λ€μ μ²λΌ μ μ ν μ μμ΅λλ€.
delegate λ°νν λ리κ²μ΄νΈλͺ
(μΈμ1, μΈμ2, ..);
μ΄ delegate νμ λ΄κΈΈ μ μλ λ©μλλ μΈμ νμ μΌμΉ λ° κ°μ μΌμΉ, λ°νν μΌμΉμ΄λ©΄ μ΄λ€ λ©μλμ΄λ λ©λλ€. λκ΅°λ€λ, λ©μλκ° μ μ λ©μλμ΄λ μΈμ€ν΄μ€ λ©μλμ΄λ μκ΄νμ§ μμΌλ―λ‘ κ·Έ νμ©μ±μ΄ ν½λλ€.
delegate νμ©μ¬λ‘
LINQ - μ
λ ₯ -> μΆλ ₯
μμ μΆλ ₯
μ κ° κ²°μ
LINQλ₯Ό μ’
μ’
μ¬μ©νμ λΆλ€μ΄λΌλ©΄, μκ² λͺ¨λ₯΄κ² μ΄λ―Έ delegateλ₯Ό μ¬μ©μ€μ
λλ€.
delegateνμ κ°μ²λΌ μ·¨κΈλμ§λ§ λ©μλμ²λΌ μν λ νΈμΆν μ μμ΅λλ€.
μ΄κ² λλ€ νμκ³Ό μ κ²°ν©νμ¬ LINQμμ μ¬μ©λκ³ μμ΅λλ€. κ°λ Ή,
var result = list.Where(x => x.IsValid).OrderBy(x => x.Number);
μΌ λ, x => x.IsValue
μ x => x.Number
λ λλ€λ‘ ννλμμΌλ©°, λλ€λ λ©μλμ΄κ³ , λ©μλκΈ° λλ¬Έμ delegate νκ³Ό νμ
λ§ λ§λ€λ©΄ μ¬μ©ν μ μμ΅λλ€. x => x.IsValid
λ νμ μ μΆμ λ°λΌμ Func<bool>
μ΄κ³ Funcκ° delegateμ΄λ―λ‘ λ°λ‘ μ΄λ κ² μΈ μ μκ² λ©λλ€.
λ§μ°¬κ°μ§λ‘ x => x.Number
κ° νμμ μΆμ μν΄μ Func<int>
κ° λ©λλ€.
μ¬λ―Έμλ κ²μ μ΄ λ λλ€κ° μ€νν μ μλ λ©μλμ κ°μΌλ―λ‘, μ μ ν Whereλ©μλμ OrderByλ©μλ λ΄λΆμμ νμμ λ°λΌ νΈμΆλ©λλ€. κ·Έλ¬λ©΄ λ΄κ° νμκ° κ²°κ³Ό κ°λ§ μ·¨νλ λ°©μμΌλ‘, μ‘°ννλ λμμ΄ λ¬΄μμ΄λ μκ΄μμ΄ μνλ λΉκ΅ λλ μ λ ¬λ±μ ν μ μκ² λ©λλ€.
λ³κ²½λλ κ° μΆμ
λ μμλ‘ λ³ν μ μλ κ°μ μν λ μ·¨νκ³ μΆμλ°, λ©μλ μΈμλ‘ κ°μ λ겨λ²λ¦¬λ©΄ κ·Έ κ°μ΄ κ²°μ
λλ―λ‘ κ°μ΄ λ³κ²½λ λλ§λ€ Update
λ±μ΄ λ©μλλ₯Ό νΈμΆν΄μ λ³κ²½κ°μ μ μ©ν΄μΌ νλλ° λ²κ±°λ‘μ΅λλ€.
λ§μ½, info.X κ°μ΄ μ’
μ’
λ³νλ κ°μ΄λΌλ©΄,
longProcess(info.X)λ₯Ό νλ λμ , longProcess(() => info.X) λ₯Ό νμ λ info.Xκ°μ΄ λ³νλ μ‘±μ‘± longProcess
λ©μλμμ μ΅μ’
κ°μ μ¬μ©ν μ μκ² λ©λλ€.