C# āļāļąāđāļāļĄāļĩāļĄāļēāļāļąāđāļāđāļāđāļāļĩ 2002 āļāļķāđāļāđāļāļāļĩāļāđāļĄāđāļāļĩāđāđāļāļ·āļāļāļāđāļēāļāļŦāļāđāļēāļāļĩāđāļāđāļāļ°āļāļĢāļāļĢāļāļ 20 āļāļĩāļāļāļāđāļāđāļē C# āđāļĨāđāļ§ ð
āđāļāļĨāđāļ§āļąāļāđāļāļīāļāļāļąāđāļāļāļĩ āđāļāļēāđāļĨāļĒāļĄāļĩ Feature āđāļŦāļĄāđāļāļģāļĨāļąāļāļāļ°āđāļāđāļēāļĄāļēāđāļāđāļāļāļēāļāļāļēāļĢāđāļāļāļĩāļāđāļĄāđāļāđāļēāļāļĩāđāļāļąāļ§ Feature āļāļĩāđāļĄāļēāđāļŦāļĄāđāļāļąāđāļ āļ§āļąāļāļāļĩāđāļāļĄāļĄāļĩ Top 5 Features āđāļŦāļĄāđāļāļĩāđāļāļ°āļĄāļēāđāļ C# 10 âĻ
āļāļķāđāļāļāļ°āļĄāļĩāļāļ°āđāļĢ Update āļĄāļēāđāļŦāļĄāđāļāđāļēāļāļāļąāđāļ āđāļāļāļđāļāļąāļāđāļĨāļĒ !!!
āđāļāļĩāļĒāļāđāļāļĒ Natakorn Hongharn -BorntoDev Co., Ltd.
1. Null Parameter Checking
Null Reference Exception āđāļāđāļāļāļĩāļāļŦāļāļķāđāļāļāļĒāđāļēāļ āļāļĩāđāđāļĢāļēāļāļ°āđāļāļāļāļąāļāļāđāļāļĒāļĄāļēāļāđāļ Bug āļāļāļāđāļāļĢāđāļāļĢāļĄāļāļāļāđāļĢāļē (āļĄāļąāļāļāđāļēāļāļāđāļēāđāļāđāļāļāļ§āļāđāļŦāļĨāļ·āļāđāļāļīāļāļāļ ð) āļāļēāļĢāļāļĩāđāđāļĢāļēāļāļ°āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāđāļāđāļē Exception āļāļĩāđ āđāļĢāļēāļāđāļāļāļāļĒāļēāļĒāļēāļĄāđāļĨāđāđāļŠāđāđāļāļ·āđāļāļāđāļāđāļāđāļāļāļĩāļĨāļ°āļāļļāļāđāļŦāđāļāļĢāļāđāļĢāļĩāļĒāļāļĢāđāļāļĒ
āļāļķāđāļāđāļāđāļē Feature āđāļŦāļĄāđāļāļąāđāļ āļŠāļēāļĄāļēāļĢāļāļāđāļ§āļĒāđāļĢāļēāđāļāļāļļāļāļāļĩāđāđāļāđāļāđāļ§āļĒāļāļ° āļāļģāđāļŦāđāđāļāđāļāđāļĢāļēāļāļđāļāđāļēāļāļāđāļēāļĒāđāļĨāļ°āđāļŦāļĨāļĨāļ·āđāļāļĒāļīāđāļāļāļķāđāļ
Pain āļāļąāļāļāļļāļāļąāļāļāļĩāđāđāļĢāļēāđāļāļāļāļąāļāļāļĢāļ°āļāļģ āļāđāļāļ·āļ āļāļēāļĢāđāļāđāļāļāļąāļ§ Parameter āļāļĩāđāļĢāļąāļāđāļāđāļēāļĄāļēāđāļ Function āđāļāļ·āđāļāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļ NULL āļāļąāđāļāđāļāļ āļāļāļāļīāđāļĢāļēāļāļ°āđāļāđāļāļąāļāļŦāļēāļāļąāļāđāļāļāļāļĩāđ
public SomeFunction(int id, SomeClass newObject) { if (newObject == null) { throw new ArgumentNullException("newObject"); } ... }
āļāļķāđāļāđāļĢāļēāļāđāļāļāļāļāļĒāļĄāļēāļāļąāđāļāļāļąāļ Throw āļāļāļāđāļĢāļ·āđāļāļĒ āđ āļāđāļēāļāļąāļ§ Parameter āđāļāđāļ NULL āđāļāđāđāļ Feature āđāļŦāļĄāđāļāļąāđāļ āđāļĢāļēāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāđāļŠāđ Throw āļāļĩāļāļāđāļāđāļ āđāļāļĢāļēāļ°āļĄāļąāļāļāļ° Throw āđāļŦāđāļāļąāļāđāļāļĄāļąāļāļīāļāđāļēāļŦāļēāļāđāļāđāļ NULL āļāđāļāļāļāļāļāļāļāļ§āđāļē āļāļĩāļŠāļļāļ āđ āđāļāđāļĨāļĒ
public SomeFunction(int id, SomeClass newObject) { ... }
2. Required Properties
āđāļāļāļļāļāļ§āļąāļāļāļĩāđ āļāļļāļāļāļāļŠāđāļ§āļāļĄāļēāļāđāļĨāļ·āļāļāļāļĩāđāļāļ°āļĨāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļ Heavy Constructors āļŦāļĢāļ·āļāļāļēāļāļāļĢāļąāđāļāļāļēāļāļāļ°āļĄāļĩāļāļēāļĢāđāļāļĩāļĒāļāđāļāļ Lightweight Constructors āļāļķāđāļāđāļ Update āđāļŦāļĄāđāđāļĢāļēāļŠāļēāļĄāļēāļĢāļ Define āļāđāļē Properties āđāļāđāđāļāļĒāļāļĢāļāđāļĨāļĒ
var newArticle = new Article { Title = "Top 10 Feature in C# 10", Category = "BorntoDev", ReleaseDate = DateTime.Now() }
āļāļķāđāļāļāļąāļāļŦāļēāļŦāļĨāļąāļāđāļĨāļĒāļāđāļāļ·āļ āļāļēāļāļŠāļīāđāļāļāļĩāđāđāļĢāļēāļāļ§āļĢāļāļ°āđāļŠāđāļāđāļēāļāļĨāļāļāđāļ§āļĨāļēāļŠāļĢāđāļēāļ Object āđāļŦāļĄāđ āđāļāđāđāļĢāļēāļāļąāļāđāļĄāđāđāļŠāđāļāļĩāđāļŠāļī āļĒāļāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļąāļāđāļāđāļāļāđāļēāļāļāļ āļŦāļēāļāđāļĢāļēāļāļ°āļŠāļĢāđāļēāļāļāļāļāļ§āļēāļĄāļŦāļāļķāđāļāļāļķāđāļāļĄāļē āļāđāļāđāļāļāđāļŠāđāļāļ·āđāļāļāļāļāļ§āļēāļĄāļĨāļāđāļāļāđāļ§āļĒāļŠāļī
(āļŠāļĢāđāļēāļāļāļāļāļ§āļēāļĄāđāļāļĒāļāļĩāđāđāļĄāđāļĄāļĩāļāļ·āđāļāļāļāļāļ§āļēāļĄ āđāļĨāđāļ§āļāļēāļĒāļāļģāļĨāļąāļāđāļāļĩāļĒāļāļāļ°āđāļĢāļāļĒāļđāđāļŦāđāļ° ð)
āļāđāļ§āļĒāļāļąāļ§ Feature āđāļŦāļĄāđ āļāļ°āđāļāļīāđāļĄāļāļąāļ§ Keyword āđāļāđāļēāļĄāļēāđāļŦāļĄāđāļāļ·āļāļāļģāļ§āđāļē ârequiredâ āđāļĄāļ·āđāļāđāļĢāļēāļŠāļĢāđāļēāļ Class āļāļķāđāļāļĄāļē āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļŠāđ Property Required āļĨāļāđāļāđāļāđ āļāđāļēāļŦāļēāļāļŠāļĢāđāļēāļ Class Object āđāļŦāļĄāđāđāļĨāđāļ§āđāļĄāđāđāļŠāđ Property Required āļāļķāđāļāļĄāļēāļĨāđāļ°āļāđ āđāļāđāļāļāļāļāļāļēāļĒāļāļ°āđāļāļāļāļķāđāļāļĄāļēāļāļąāļāļāļĩ !!
public class Article { public required string Title { get; init; } public string Category { get; init; } public DateTime ReleaseDate{ get; init; } }
3. Field Keyword
āļāļąāļ§ Feature āđāļŦāļĄāđāļāļĩāđāļāļ°āļĄāļēāļāļĩāļāļāļąāļ§āļŦāļāļķāđāļāļāđāļāļ·āļ Init Accessors āļāļģāđāļŦāđāļāļąāļ§ Object āļāļĩāđāđāļāđāļāļāļĢāļ°āđāļ āļāļāļāļāļĩāđāļāļąāđāļāļĒāļ·āļāļŦāļĒāļļāđāļāļĄāļēāļāļāļķāđāļ āđāļāļ·āđāļāļāļāļēāļ C# 10 āđāļĢāļēāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāļĄāļē Implement āļāļąāļ§ Backing Field āđāļāļĒāđāļāđāđāļāđāđāļāļĩāļĒāļāļāļąāļ§ Keyword āļāļĩāđāđāļāđāļēāļĄāļēāđāļŦāļĄāđāļāļ·āļ âfieldâ āļāļąāļ§āļāļĒāđāļēāļāļāļąāļāļāļĩāđ
public class Article { private string _title; public string Title { get { return _title; } set { if (value.Trim() == "") throw new ArgumentException("Title can't be empty"); _title = value; } } }
āđāļāļĨāļĩāđāļĒāļāđāļāđāļ
public class Article { public string Title { get; set { if (value.Trim() == "") throw new ArgumentException("Title can't be empty"); field = value; } } }
4. Global Usings
āļāļĩāđāļāđāđāļāđāļāļāļĩāļ 1 Feature āđāļŦāļĄāđāļāļĩāđāļāļ°āļāļģāđāļŦāđāđāļĢāļēāđāļāļĩāļĒāļāđāļāđāļāļāđāļēāļĒāļāļķāđāļ āļāļĒāđāļēāļāļāļĩāđāļāļļāļāļāļāļĢāļđāđāļ§āđāļēāļāļļāļāļāļĢāļąāđāļāđāļāđāļāļĨāđ C# āļāļ°āļāđāļāļāļĄāļĩ using āļāļĒāļđāđāļāđāļēāļāļāļāļāļĒāļđāđāļĄāļēāļāļĄāļēāļĒ āļāļģāđāļŦāđāļŠāđāļ§āļāļāļāļāļđāļĢāļāļĄāļēāļāđāļĨāļ° āļŦāļēāļāļĄāļĩāļāļēāļĢāđāļāđāļāļēāļ āļāđāļāđāļāļāļāļāļĒāļāļģāđāļāđāļŠāđāđāļāļāļļāļ āđ āđāļāļĨāđāļāļĩāļāļāđāļ§āļĒ
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.UI; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;
āļāļķāđāļāđāļāđāļē Feature āļāļĩāđāļāļ°āļāđāļ§āļĒāđāļāđāļāļąāļāļŦāļēāđāļāļāļļāļāļāļĩāđāđāļāļĒāļāļēāļĢāļāļĩāđāđāļĢāļēāđāļāđāļāļģāļ§āđāļē âglobalâ āļāļģāļŦāļāđāļē using āļāļģāđāļŦāđāđāļĢāļēāđāļāļĩāļĒāļāđāļāđāļāļĢāļ°āļāļēāļĻ using āđāļŦāļĨāđāļēāļāļĩāđāđāļŠāđāļŠāļąāļāđāļāļĨāđāđāļ Project āļāđāļāļ°āļāļ·āļāļ§āđāļēāļāļļāļāđāļāļĨāđāļĄāļĩ using āđāļŦāļĨāđāļēāļāļĩāđāļŦāļĄāļāđāļĨāļĒ āļāļģāđāļŦāđāđāļāļĨāđāļāļ·āđāļ āđ āđāļĄāđāļāļģāđāļāđāļāļāđāļāļāļāļĢāļ°āļāļēāļĻ using āđāļĨāļĒāļāđāļ§āđāļēāđāļāđ (āđāļāđāļāļŠāļļāļ āđ)
global using Microsoft.AspNetCore.Builder; global using Microsoft.AspNetCore.Hosting; global using Microsoft.AspNetCore.HttpsPolicy; global using Microsoft.AspNetCore.Identity; global using Microsoft.AspNetCore.Identity.UI; global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.Configuration; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.Extensions.Hosting; global using System; global using System.Collections.Generic; global using System.Linq; global using System.Threading.Tasks;
5. File Namespaces
āļāļąāļ§āļāļĩāđāļāđāļāļĩāđāļĄāđāđāļāđāļāļąāļāđāļĨāļĒ āđāļāļĒāļāļāļāļīāđāļĨāđāļ§āļāļąāļ§ File Namespaces āļāļąāđāļāđāļĢāļēāļāđāļāļāļĢāļ°āļāļļāđāļĨāđāļ§āđāļŠāđāļāļĩāļāļāļēāļāļĢāļāļāđāļāļŠāđāļ§āļāļāļāļ File Namespaces āļāđāļ§āļĒ
namespace Blog { public class Article { ... } }
āđāļāđāđāļ Update āđāļŦāļĄāđāļāļģāđāļŦāđāđāļĢāļēāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāđāļŠāđāļāļĩāļāļāļēāļāļĢāļāļāļāļĩāļāļāđāļāđāļ āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ Namespace āđāļ Flie Level āđāļāļāļāļĩāđāđāļāđāļāļąāļāļāļĩ
namespace Blog; public class Article { ... }
āđāļĨāļ°āļāļĩāđāļāđāļāļ·āļ Top 5 Features āđāļŦāļĄāđāļāļāļ C# 10 āļāļĩāđāļāļģāļĨāļąāļāļāļēāļĄāļēāđāļāđāļĢāđāļ§ āđ āļāļĩāđ āļŦāļ§āļąāļāļ§āđāļēāļāđāļāļĄāļđāļĨāļāļĩāđāļāļ°āđāļāđāļāļāļĢāļ°āđāļĒāļāļāđāļŠāļģāļŦāļĢāļąāļāļāļđāđāļāđāļēāļāļāļļāļāļāļāļāļ°āļāļĢāļąāļāļāļĄ ð
**āļŦāļēāļāļāļļāļāļŠāļāđāļāļāļąāļāļāļē āļŠāļāļēāļĢāđāļāļāļąāļ āđāļāļāļāļĨāļīāđāļāļāļąāļ
āđāļĨāļ° āđāļāļāđāļāđāļĨāļĒāļĩāļāļāļāļāļąāļ§āđāļāļ ?**
āļāļĒāđāļēāļĢāļāļāđāļē ! āđāļĢāļĩāļĒāļāļĢāļđāđāļāļąāļāļĐāļ°āļāđāļēāļāļāļīāļāļīāļāļąāļĨāđāļāļ·āđāļāļāļąāļāđāļāļĢāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļāļāļāļļāļ
āđāļĢāļīāđāļĄāļāļąāđāļāđāļāđāļāļ·āđāļāļāļēāļ āļāļĢāđāļāļĄāļāļāļīāļāļąāļāļīāļāļĢāļīāļāđāļāļĢāļđāļāđāļāļāļŦāļĨāļąāļāļŠāļđāļāļĢāļāļāļāđāļĨāļāđāļ§āļąāļāļāļĩāđ