상속(inheritance)은 OOP의 가장 중요한 특징들 중 하나이다. 클래스는 다른 클래스를 상속할 수 있다. 여기서 한 클래스가 다른 클래스를 상속한다는 것은, 상속하는 클래스가 상속되는 클래스의 모든 멤버들을 가진다는 뜻이다. 상속을 파생(derivation)이라고 말하기도 한다. 그리고 상속된 클래스를 자식 클래스, 상속의 대상이 되는 클래스를 부모 클래스(parent class) 또는 기반 클래스(base class)라고 부른다. C#의 개체들은 단 하나의 기반 클래스로부터만 상속될 수 있다.
상속은 단일한 기반 클래스를 확장하거나. 또는 기반 클래스로부터 좀더 구체적인 클래스들을 만들어내기 위한 수단으로 쓰인다. 예를 들어서 하나의 가축을 의미하는 Animal이라는 클래스가 있다고 하자. 이 클래스는 EatFood()나 Breed() 같은 메서드들을 가질 것이다. 이 클래스로부터 Cow라는 클래스를 파생한다면, Cow는 Animal의 모든 메서드들을 가지며, 추가적으로 Moo()나 SupplyMilk() 같은 자신만의 메서드들도 가질 수 있다. 또한 Animal로부터 Cluck()과 LayEgg() 같은 메서드를 가지는 Chicken 클래스를 파생할 수도 있을 것이다.
--- p.232
누구나 자신만의 C# 클래스를 정의할 수 있듯이, 누구나 자신만의 XML 요소들을 정의할 수 있다. 따라서 C# 클래스에서와 마찬가지로, 이 요소가 어떤 어휘에 속하는 것인지 식별할 필요가 있다. 역시 C#에서와 마찬가지로, 그러한 수단으로 쓰이는 것은 바로 네임스페이스이다. 하나의 XML 문서 안에, 서로 다른 어휘에 속한 같은 이름의 요소들과 어트리뷰트들이 들어 있다고 해도, XML 네임스페이스를 이용하면 사람이나 파서가 그것들을 혼동하지 않게 할 수 있다.
XML 네임스페이스도 꽤 복잡한 주제이므로, 기본적인 내용만 이해하고 넘어가도록 하자. 어떤 특정한 네임스페이스에 속한 요소나 어트리뷰트를 표기할 때에는 요소 이름 앞에 그 네임스페이스의 접두어와 콜론을 붙인다. 예를 들어서 은 wrox 네임스페이스 안의 요소를 의미한다. 그런데 네임스페이스 역시 누구나 정의할 수 있기 때문에, 서로 다른 사람이 같은 이름의 네임스페이스 접두어를 정의할 가능성이 존재한다. 따라서 네임스페이스 접두어 역시 어떠한 고유한 식별 정보를 통해서 정의되어야 한다. 그러한 고유한 식별 정보로 쓰이는 것이 Uniform Resource Indentifier(URI)이다. URI는 여러 가지 형태가 있으나, 가장 흔한 것은 "http://www.wrox.com" 같은 웹 주소이다.
접두어를 선언할 때에는, 요소 안에 'xmlns:<접두어>' 어트리뷰트를 넣고, 그 값을 네임스페이스를 식벽하기 위한 고유한 URI로 설정한다. 그러면 그 접두어를 그 요소 안의 어느 곳에서도(내포된 하위 요소들에서도) 사용할 수 있다.
--- p.676