C# 6.0μ μλ‘μ΄ κΈ°λ₯
2. λ¬Έμ₯ λ 벨
1) using static λ¬Έ
static λ©μλ(νΉμ μμ±)λ₯Ό μ¬μ©νκΈ° μν΄μλ ν΄λμ€λͺ .λ©μλλͺ (νΉμ μμ±λͺ )κ³Ό κ°μ΄ ν΄λμ€λͺ μ λ°λμ μμ μ§μ ν΄ μ£Όμ΄μΌ νλ€. C# 6.0μμλ using staticμ μ¬μ©ν΄ 미리 μ§μ ν΄ μ€λ€λ©΄, ν΄λΉ νμΌ λ΄μμλ ν΄λμ€λͺ μμ΄ μ§μ μ¬μ©ν μ μλ€.
using static System.Console;
namespace CS6
{
class Program
{
static void Main(string[] args)
{
// Console. μλ΅ κ°λ₯
WriteLine("csharpstudy.com");
}
}
}
2) catch/finally λΈλ‘μμ await μ¬μ©
C# 5.0μμλ awaitλ₯Ό catch/finally λΈλ‘μμ μ¬μ©ν μ μμμ§λ§, C# 6.0μμλ μ΄λ₯Ό κΈ°λ³Έμ μΌλ‘ μ§μνκ² λμλ€. catch λΈλ‘μμ μΌλ°μ μΌλ‘ μλ¬λ₯Ό λ‘κΉ μ νλ κ²½μ°κ° λ§μλ°, μ΄λ λ‘κΉ μ²λ¦¬λ₯Ό λΉλκΈ°μ μΌλ‘ νκΈ° μν΄ awaitλ₯Ό μ¬μ©ν μ μλ€.
IDbConnection conn;
try
{
//...
var response = await req.GetResponseAsync();
//...
}
catch (Exception ex)
{
// μλ¬λ₯Ό λΉλκΈ°λ‘ λ‘κΉ
await Log(ex);
}
finally
{
// Closeλ₯Ό λΉλκΈ°λ‘ μ²λ¦¬
await Close(conn);
}
3) Exception Filter μ§μ
Exception Filterλ catch μ νΉμ ν 쑰건μΌλ‘λ§ λ€μ νν°λ§νλ κ²μΌλ‘ catch() λ¬Έ λ€μ μΆκ°μ μΈ when 쑰건문μ μ¬μ©νλ©΄ λλ€.
try
{
//...
}
catch(Win32Exception ex) when (ex.NativeErrorCode == 0x10)
{
Log(ex);
}
3. ν΄λμ€ λ©€λ² λ 벨
1) μλ μμ± μ΄κΈ°μ(Auto Property Initializer)
μλ μμ±(Auto Property)μ νλλ₯Ό μ§μ ν νμκ° μμ΄ μ»΄νμΌλ¬κ° μλμΌλ‘ ν΄λΉ νλ(backing field)λ₯Ό λ§λ€μ΄ μ£Όλ μμ±μΌλ‘ C# 6.0μμλ μ΄ μλ μμ±μ μ΄κΈ°κ° μ§μ μ΄ κ°λ₯ν΄μ‘λ€.
class Person
{
public string Name { get; set; } = "(No name)";
}
2) μ½κΈ° μ μ© μλ μμ±(Getter only)
μλ μμ±μ νμ getκ³Ό setμ ν¨κ» μ¬μ©ν΄μΌ νλ€. λ§μ½ μΈλΆμ μ½κΈ°λ§ νμ©ν κ²½μ°, { get; private set; }κ³Ό κ°μ΄ set μ‘μΈμ€ μ νμ ν΄μΌ νλ λ²κ±°λ‘μμ΄ μμλ€. κ·Έλ¬λ μ΄μ C# 6.0μμλ getλ§ μ¬μ©λ κ°λ₯νμ¬ μ΄μ μ 볡μ‘νκ² κ΅¬νλμλ Immutable Property(λ³κ²½ λΆκ°λ₯ν μμ±)μ κ°λ¨ν ꡬνν μ μκ² λμλ€.
class Person
{
public string Name { get; set; } = "(No name)";
// μ΄κΈ°ν μμ κ²½μ° λν΄λκ° μ¬μ©
public string Nickname { get; }
public int Age { get; }
// Auto Property Initializer μ¬μ©νμ¬ μ΄κΈ°κ° ν λΉ
public bool Enabled { get; } = true;
// μμ±μμμ μ΄κΈ°κ° ν λΉ
public int Level { get; }
public Person()
{
this.Level = 1;
}
}
static void Main(string[] args)
{
Person p = new Person();
Console.WriteLine(p.Name);
Console.WriteLine(p.Nickname); // null μΆλ ₯
Console.WriteLine(p.Age); // 0 μΆλ ₯
}
3) Expression-bodied member μ¬μ©
μμ±μ΄λ λ©μλλ λ³΄ν΅ μ¬λ¬ λ¬Έμ₯λ€λ‘ ꡬμ±λ λΈλ‘μ μ€ννλ€. C# 6.0μμλ μμ±μ΄λ λ©μλμ λΈλ‘μ΄ κ°λ¨ν κ²½μ° ν¨μμ(expression)μ μ¬μ©ν μ μλλ°, μ΄λ₯Ό Expression-bodied member ννμ΄λΌ νλ€. μ΄λ κΈ°μ‘΄μ λλ€μκ³Ό μ μ¬νλ©° μμ±μ΄λ λ©μλ Bodyλ₯Ό κ°λ΅ν λλ€μμ²λΌ ννν κ²μ΄λ€.
// κΈ°μ‘΄μ μμ±
public int Area
{
get
{
return Height * Width;
}
}
// Expression-bodied member νν
public int Area => Height * Width;
// λ€μν Expression-bodied member νν
// 1. λ©μλμμ νλμ Point κ°μ²΄ 리ν΄
public Point Move(int x, int y) => new Point(X+x, Y+y);
// 2. λ©μλμμ void 리ν΄
public void Print() => Console.WriteLine(data);
// 3. μμ±μμ get 리ν΄
public string Name => FirstName + " " + LastName;
// 4. μΈλ±μμμ Customer κ°μ²΄ 리ν΄
public Customer this[int id] => db.FindCustomer(id);
// 5. μ°μ°μ λ©μλ νν
public static Complex operator +(Complex a, Complex b) => a.Add(b);