(.net 7.0, nullable: enable)
class Foo
{
public event EventHandler? FooEvent;
}
class Bar
{
public Bar(Foo foo)
{
foo.FooEvent -= FooEventHandler;
foo.FooEvent += FooEventHandler;
}
private void FooEventHandler(object? s, EventArgs e) { }
}
1. μ΄λ²€νΈλ₯Ό ꡬλ λ° κ΅¬λ μ·¨μλ₯Ό ν λλ nullμ λν΄ κ΄λν©λλ€.
null κ²μ¬ μ ν΄λ κ²½κ³ λ λ μ΄λ° κ±° μ λΉλλ€. λ μ΄κ±°λ λ€λ€ μμ€ κ²μ λλ€.
2. κΈ°μ‘΄μ λ±λ‘λμ§ μμ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό ꡬλ μ·¨μλ₯Ό ν΄λ μλ¬κ° μμ΅λλ€
μ¦, β-=β μ°μ°μλ₯Ό μ°κΈ° μ μ β+=β μ°μ°μκ° μμλμ§ μμλμ§ νμΈν νμκ° μμ΅λλ€.
λ§μ κΈμμ, IDisposable μ ꡬνν΄μ, κ°μ²΄κ° μλ©ΈλκΈ° μ μ ꡬλ
ν μ΄λ²€νΈλ₯Ό ꡬλ
μ·¨μνλΌκ³ κΆκ³ νκ³ μλλ°,
class Bar : IDisposable
{
private Foo _foo;
public Bar(Foo foo) { _foo = foo; _foo.FooEvent += FooEventHandler; }
private void FooEventHandler(object? s, EventArgs e) { }
public void Dispose() { _foo.FooEvent -= FooEventHandler; }
}
λ¨μν 2μ€ κ΅¬λ
νΉμ ꡬλ
λμ μ΄ λ¬Έμ λλ κ²½μ°, μμ κ°μ λ²μ‘μ€λ° νμ μ½λλ₯Ό μΈκ² μλλΌ,
무μ§μ±μΌλ‘ -= μ°μ°μ λ¨Όμ νΈμΆνκ³ , += μ°μ°μ νΈμΆνλ©΄ λ§€μ° κ°λ¨ν΄μ§λλ€.
λ νλ, μ¬λ―Έμλ μ¬μ€μ
3. μ΄λ¬ν κ΄λν μ¬μ©λ²μλ λΆκ΅¬νκ³ , μ΄λ²€νΈ νΈμΆμ κ²½μ°, null κ²½κ³ λ μ격ν©λλ€.
class Foo
{
public event EventHandler? FooEvent;
// null κ²½κ³ .
public void Fire() { FooEvent.Invoke(this, EventArgs.Empty); }
}
μ΄λ° μ νμ μ격ν¨μΌλ‘ μΈν΄ λ§μΉ λκ° νΌμλ§ λ²μμ κ΅°λ¦Όνλ κ² κ°μ΅λλ€.