I have two classes in this project;Category: This will be responsible to hold the latest information.public class Om_Category{    public Int32 CategoryID { get; set; }    public String CategoryName { get; set; }    public String CategorySanitized { get; set; }    public Boolean IsActive { get; set; }    public DateTime CreationDate { get; set; }    public Int32 ModifiedBy { get; set; }    public Int64 CreatedBy { get; set; }    public Int64 ModifiedBy { get; set; }}Category History: This will hold the history of all modifications done for any category.public class Om_CategoryHistory{    public Int32 CategoryID { get; set; }    public String CategoryName { get; set; }    public String CategorySanitized { get; set; }    public Boolean IsActive { get; set; }    public DateTime LastModificationDate { get; set; }    public Int64 LastModifiedBy { get; set; }}Is there anything that I can reuse or optimizations I can make?
Category history
c#
You can extract the common for both properties to a base class which both classes then inherit like so  public class Om_CategoryBase{    public Int32 CategoryID { get; set; }    public String CategoryName { get; set; }    public String CategorySanitized { get; set; }    public Boolean IsActive { get; set; }    public DateTime LastModificationDate { get; set; }    public Int64 LastModifiedBy { get; set; }}  public class Om_Category : Om_CategoryBase{    public DateTime CreationDate { get; set; }    public DateTime ModifiedBy { get; set; }}  public class Om_CategoryHistory : Om_CategoryBase{} but you should maybe come up with a better name.  If the property setters don't have to be public you should consider to make them protected instead.Based on the comment  Kindly explain with the help of an example for this :If the property setters don't have to be public you should consider to make them protected instead.Like public and private the protected scope defines in which scope a method or property can be accessed. Protected means it can be accessed by the class itself and the class which is inheriting from this class.  For instance if you would make the  setter of CategoryID protected like so  public class Om_CategoryBase{    public Int32 CategoryID { get; protected set; }    public String CategoryName { get; set; }    public String CategorySanitized { get; set; }    public Boolean IsActive { get; set; }    public DateTime LastModificationDate { get; set; }    public Int64 LastModifiedBy { get; set; }}  you can only set this property from within this base class and from inside the derived classes Om_Category and Om_CategoryHistory. If you would try to set this property from another class which doesn't inherit the base class, your IDE would show an error.  So assuming the Om_Category would have a constructor like so  public Om_Category (int catagoryId){    CategoryID = categoryId;}  the CategoryID property would be set to the passed in categoryId value.