Близнюки — патерн проєктування, що дозволяє імітувати множинне наслідування у мовах програмування, які цього не підтримують.

Опис ред.

Нехай дано два класи, які потрібно успадкувати

public class ListBox
{
	public virtual void Render()
	{
		System.Console.WriteLine("Render list box");
	}
}

public class UserCollection
{
	public virtual void GetUsers()
	{
		System.Console.WriteLine("Return collection of users");
	}
}

Тоді у батьківському класі реалізуємо класи спадкоємці як внутрішні класи:

public class UserListBox
{
	private readonly string _callerName = "UserListBox";

	// батьківський клас містить посилання на кожного із нащадків
	private readonly InnerUserCollection _userCollection;

	public UserListBox()
	{
		_userCollection = new InnerUserCollection(this);
	}

	// батьківський клас реалізовує поведінку всіх класів, що наслідує
	public static implicit operator UserCollection(UserListBox userListBox) => userListBox._userCollection;

	private class InnerUserCollection : UserCollection
	{
		// кожний спадкоємець містить посилання на батьківський клас
		private readonly UserListBox _parent;

		public InnerUserCollection(UserListBox parent)
		{
			this._parent = parent;
		}

		public override void GetUsers()
		{
			// доступ до приватних членів батьківського класу
			System.Console.WriteLine(_parent._callerName);

			base.GetUsers();
		}
	}
}

Реалізація ред.

C# ред.

Див.також ред.