Brace는 항상 라인의 처음에 위치한다
// O
if (condition)
{
Run();
}
// X
if (condition){
Run();
}
블록 안에 단 하나의 문장만 있더라도 반드시 Brace를 붙인다
// O
if (condition)
{
Run();
}
// X
if (condition)
Run();
단, get/set 속성을 짧게 정의하는 경우 { }를 한 라인으로 처리한다
public string Name
{
get { return this.name; }
set { this.name = value; }
}
클래스나 변수, 메서드명을 지정하는 방법은 여러가지가 있다
// Camel Case
startIndex
// Pascal Case
StartIndex
// Snake Case
start_index
클래스, 메서드, 속성, 이벤트 명
public void Order // 클래스명
{
public int OrderId { get; set; } // 속성
public void PlaceOrder(int id) // 메서드
{
}
public event EventHandler Completed; // 이벤트명
}
Public 상수와 Public 읽기전용 정적 변수
public void Order
{
public const int MaxOrders = 30;
public static readonly Tag;
}
Enum Value 및 Enum element
public enum OrderStatus
{
Open,
InDelivery,
CancelByCustomer
}
상수가 아닌 필드명
class MyClass
{
int startIndex;
string lastName;
}
메서드 파라미터
CallMethod(startIndex, endIndex);
로컬 변수명
public void Run()
{
int startIndex;
}
클래스 멤버들을 명시적으로 표시하기 위해 필드, 메서드, 속성, 이벤트 등의 멤버 앞에 this.을 붙인다
// O
this.name
// X
name
인터페이스명은 항상 I로 시작한다
public interface IAlterable { }
Region을 적극적으로 활용한다
using System;
using System.Data.SqlClient;
namespace MyNamespace
{
public class MyClass : IFoo
{
#region Fields
private int id;
private int key;
public event EventHandler FooChanged;
#endregion
#region Constructors
public MyClass()
{
}
#endregion
#region Properties
public int Bar { get; set; }
public int Foo { get; set; }
#endregion
#region Public Methods
public void DoSomething()
{
//...
}
public void FindSomething()
{
//...
}
#endregion
#region Interface Methods
void IFoo.DoSomething() { DoSomething(); }
#endregion
#region Private Methods
private void CheckSomething() { … }
private void GetSomething() { … }
private void SortSomething() { … }
#endregion
#region Nested Types
private class NestedType
{
}
#endregion
}
}