public class WrongGUIDTypeException:Exception
public string InternalRepresentation
protected static string Name = "Base";
public BaseGUID(string guid, string name)
if (!guid.EndsWith("_"+name))
throw new WrongGUIDTypeException();
public static BaseGUID NewGuid()
return new BaseGUID(Guid.NewGuid().ToString()+"_"+Name, Name);
public override bool Equals(object obj)
if (obj == null || GetType() != obj.GetType())
return ((BaseGUID)obj).InternalRepresentation == guid;
public static bool operator ==(BaseGUID x, BaseGUID y)
public static bool operator !=(BaseGUID x, BaseGUID y)
public override int GetHashCode()
return guid.GetHashCode();
public override string ToString()
public class UserGUID: BaseGUID
protected new static string Name = "User";
public UserGUID(string guid): base(guid, Name){}
public new static UserGUID NewGuid()
return new UserGUID(Guid.NewGuid().ToString()+"_"+Name);
public class GroupGUID: BaseGUID
protected new static string Name = "Group";
public GroupGUID(string guid): base(guid, Name){}
public new static GroupGUID NewGuid()
return new GroupGUID(Guid.NewGuid().ToString()+"_"+Name);
public static void Main()
var user1 = UserGUID.NewGuid();
var user2 = UserGUID.NewGuid();
var user3 = new UserGUID(user1.ToString());
var group1 = GroupGUID.NewGuid();
Console.WriteLine(user1);
Console.WriteLine(user2);
Console.WriteLine(user3);
Console.WriteLine(group1);
Console.WriteLine(user1.Equals(user3));
Console.WriteLine(user2.Equals(user3));
Console.WriteLine(user1==user3);
Console.WriteLine(user2==user3);
Console.WriteLine(group1==user1);
var user4 = new UserGUID(group1.ToString());
Console.WriteLine(e.Message);