using System.Collections.Generic;
public interface IEntryable {
public class Character : IEntryable {
public void FromEntry(Entry e) {
Console.WriteLine("Base import");
public virtual void ImportCustomFields(Entry e) {
Console.WriteLine("Base export");
public virtual void ExportCustomFields(Entry e) {
public class CharacterStorage<TChar> where TChar : Character, new() {
public List<TChar> myCharacters = new List<TChar>();
TChar instance = new TChar();
myCharacters.Add(instance);
instance.FromEntry(new Entry());
public class CharacterStorage2 {
public List<Character> myCharacters = new List<Character>();
public virtual Character GenerateCharacter() {
Character instance = GenerateCharacter();
myCharacters.Add(instance);
instance.FromEntry(new Entry());
public class MyCharacter : Character {
public override void ImportCustomFields(Entry e) {
Console.WriteLine("New import");
public class MyCharacterStorage : CharacterStorage<MyCharacter> {
public void NoteworthyIssue() {
Console.WriteLine(myCharacters.ToString());
public class MyCharacterStorage2 : CharacterStorage2 {
public override Character GenerateCharacter() {
return new MyCharacter();
public void NoteworthyIssue() {
Console.WriteLine(myCharacters.ToString());
public static void Main()
MyCharacterStorage myStorage = new MyCharacterStorage();
myStorage.NoteworthyIssue();
MyCharacterStorage2 myStorage2 = new MyCharacterStorage2();
myStorage2.NoteworthyIssue();