using System.Collections.Generic;
public string Name { get;set; } = "blue";
public abstract class Cup
protected Color Color { get; private set; }
protected Cup(Color color)
public string ColorName {
set => Color.Name = value;
public class TeaCup : Cup
public TeaCup() : base(null) { }
public TeaCup(Color color) : base(color) { }
public class CoffeeCup : Cup
public CoffeeCup() : base(null) { }
public CoffeeCup(Color color) : base(color) { }
private static void Main(string[] args)
var cup1 = new TeaCup(color);
var cup2 = new CoffeeCup(color);
Console.WriteLine("color = {0}", color.Name);
Console.WriteLine("cup1.ColorName = {0}", cup1.ColorName);
Console.WriteLine("cup2.ColorName = {0}", cup2.ColorName);
cup2.ColorName = "green";
Console.WriteLine("cup1.ColorName = {0}", cup1.ColorName);
Console.WriteLine("cup2.ColorName = {0}", cup2.ColorName);