using System.Collections.Generic;
public static void Main()
OuterClass1 oc1 = new OuterClass1();
var cat1 = oc1.AddSomething(new Cat("cat1", "meow"));
var cat2 = oc1.AddSomething(new Cat("cat2", "hiss"));
var dog1 = oc1.AddSomething(new Dog("dog1"));
var cat1instance = oc1.GetSomething("cat1");
Console.WriteLine(cat1instance.Name);
public interface ISomething1
private List<ISomething1> Somethings = new List<ISomething1>();
internal ISomething1 AddSomething(ISomething1 newsomething)
Somethings.Add(newsomething);
internal ISomething1 GetSomething(string name)
return Somethings.FirstOrDefault(smtng => smtng.Name == name);
private class Something1: ISomething1
public Something1(string name) { Name = name; }
public string Name { get; }
public class Cat : ISomething1
public Cat(string name, string sound = "")
public string Name { get; }
public string CatSound { set; get; }
public class Dog : ISomething1
public Dog(string name, string sound = "")
public string Name { get; }
public string DogSound { set; get; }
public class Tiger : ISomething1
public Tiger(string name) { Name = name; }
public string Name { get; }