我最近發現的 C# 介面可以宣告屬性。假設我有幾個類Company,Project并且User. 對于這些類,公共變數將是Id和Name。
我應該在介面中宣告這些變數(如代碼塊 #1 所示),還是將它們添加到基類 ( BaseClass) 并將它們繼承到這些物件(代碼塊 #2)?
我正在開發 Blazor 應用程式,但對 C# 中哪一個是標準感到困惑。
代碼塊#1:
public interface IBase
{
Guid ID { get; }
String Name { get; set; }
}
public class Company : IBaseEntity
{
public Guid Id { get; set; }
public String Name { get; set; }
public Company()
{
this.Id = Guid.NewGuid();
this.CreatedAt = DateTime.Now;
}
}
代碼塊#2:
public class BaseClass
{
Guid ID { get; }
String Name { get; set; }
}
public class Company: BaseClass
{
public Company()
{
this.Id = Guid.NewGuid();
this.CreatedAt = DateTime.Now;
}
}
uj5u.com熱心網友回復:
我正在開發 Blazor 應用程式,但對 C# 中哪一個是標準感到困惑。
沒有標準,因為基類和介面有不同的用途。
展示:
我IBase對所有資料庫資料類都使用了類似的東西——我的是IDbRecord.
public interface IDbRecord
{
Guid ID { get; }
String Name { get;}
}
和一個基類:
public abstract class DbRecordBase : IDbRecord
{
public Guid ID { get; set; }
public string Name { get; set; } = string.Empty;
}
下面是一些實作。
public class Company : IDbRecord
{
public Guid ID { get; set; }
public string CompanyName { get; set; } = String.Empty;
public string Name => this.CompanyName;
}
public class Car : DbRecordBase, IDbRecord { }
public class Lorry : DbRecordBase, IDbRecord
{
public decimal UnladenWeight { get; set; } = 0m;
}
public class Employee : IDbRecord
{
public Guid ID { get; set; }
public string FirstName { get; set; } = String.Empty;
public string LastName { get; set; } = string.Empty ;
public string Name => $"{this.FirstName} {this.LastName}";
}
兩者都有其用途,但用途不同:
基類為樣板代碼提供了一個平臺。本Car類使用樣板原樣。 Lorry添加一個額外的屬性。 Company并且Employee根本不要使用它。
介面提供了一個通用介面,您可以使用它來應用于所有類。我可以在所有類上使用以下方法來提取SortedDictionary我可以使用任何 Html Select的物件。
public SortedDictionary<Guid, string> GetLookUpList(List<IDbRecord> records)
{
var list = new SortedDictionary<Guid, string>();
records.ForEach(record => list.Add(record.ID, record.Name));
return list;
}
您可以通過IDbRecord介面參考所有類,但不能直接將Lorry類稱為DbRecordBase類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/369611.html
