Итак, у меня есть класс, который для простоты я назову AnimalStats
:
namespace Animals.Entities
{
public class AnimalStats
{
public int Size { get; set; }
public int Bite { get; set; }
public int Cuteness { get; set; }
}
}
Я хочу создать еще один класс с именем AnimalStatsModifier
, который содержит свойства, которые отображаются из тех, что указаны в AnimalStats
, например,
namespace Animals.Entities
{
public class AnimalStatsModifier
{
public double Size { get; set; }
public double Bite { get; set; }
public double Cuteness { get; set; }
}
}
Я хочу каким-то образом усилить эти отношения.
Первый метод, который я пробовал, - это игра с абстракцией и наследованием, но я не мог понять способ делать то, что я хочу (были бы признательны за совет по некоторому шаблону проектирования или принципу OOP).
Моя вторая попытка заключалась в использовании текстового шаблона T4 для создания класса AnimalStatsModifier
в аналогично этому:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Animals.Entities
{
<# var statsClass = typeof(AnimalStats); #>
public class <#= statsClass.Name #>Modifier
{
<# foreach (var property in statsClass.GetProperties()) { #>
public float <#= property.Name #> { get; set; }
<# } #>
}
}
Но код шаблона не смог найти класс AnimalStats
, если я не добавил ссылку на сборку, например:
<#@ assembly name="$(SolutionDir)\Entities\bin\Debug\netcoreapp3.1\Animals.Entities.dll" #>
Однако для этого требуется, чтобы проектная dll была собрана до того, как класс можно будет найти, поэтому сборка завершится неудачно, если класс не был собран раньше, и существует своего рода неприятная циклическая зависимость.
Кто-нибудь получил любой совет о том, как Я должен приближаться к этому?