public abstract class AuditLog {
public virtual string Id {get;set;} = Guid.NewGuid().ToString();
public abstract string Type {get;}
public class DirectoryAuditLog : AuditLog {
public override string Type {get;} = "DirectoryAuditLog";
public class SignInAuditLog : AuditLog {
public override string Type {get;} = "SignInAuditLog";
public class TimeTracker : AuditLog {
public override string Id {get;set;} = "TimeTracker";
public override string Type {get;} = "TimeTracker";
public static void Main()
AuditLog d = new DirectoryAuditLog();
AuditLog s = new SignInAuditLog();
AuditLog t = new TimeTracker();
Console.WriteLine($"{d.Id} - {d.Type}");
Console.WriteLine($"{s.Id} - {s.Type}");
Console.WriteLine($"{t.Id} - {t.Type}");