既存の構造に新しいクラスを追加する際に問題が発生しました。私の問題をできるだけ明確に説明します
public interface Imust
{
string Name { get; set; }
string File { get; set; }
string RowKey { get; set; }
string Time { get; set; }
string PartitionKey { get; set; }
}
public class TA : TableServiceEntity, Imust
{
public string Time { get; set; }
public string Name { get; set; }
public string File { get; set; }
}
public class TB : TableServiceEntity, Imust
{
public string Time { get; set; }
public string Name { get; set; }
public string File { get; set; }
}
public class TC : TableServiceEntity, Imust
{
public string Time { get; set; }
public string Name { get; set; }
public string File { get; set; }
}
public class _Table <T> : _Account where T : Imust
{
}
ここで、上記の 3 つのクラスはテーブルとして実装され、そのプロパティはプロジェクトの列として実装されます。ジェネリック クラスではインターフェイス制約を設定するため、Imust インターフェイスは各クラスに実装されます。TableServiceEntity クラスには、RowKey と PartitionKey の実装が含まれています。また、このクラスは 3 つのエンティティすべてで継承されます。
問題: アプリケーションに新しいテーブルを追加する必要があります。そのため、ここに新しいクラスを追加する必要があります。
public class TD : TableServiceEntity
{
}
このクラスにはこれらの列が含まれていないため、Imust インターフェースを実装したくありません。しかし、ジェネリッククラスのパラメーターとして渡す必要があります_Table
。この新しいクラスには異なる列がありますが、他の3つのエンティティと同じ機能を実行するためです。既存の構造体を維持しながら、この新しいクラスを追加するにはどうすればよいですか?
この問題のより良い解決策を教えてください。
編集
はい、制約 TableServiceEntity を基本クラスとして配置できます。しかし、ジェネリッククラスでは、プロパティ_Table
を操作する関数はほとんどありませんFile
public T AccessEntity(string Id = "0", string File = "0")
{
return (from e in ServiceContext.CreateQuery<T>(TableName)
where e.RowKey == Id || e.File == File
select e).FirstOrDefault();
}
このインターフェイスの制約を削除すると、エラーが表示されT does not have a defination for File
ます。