C# 如何仅在其中设置位置变量';是父类,而不是每个继承的类?

C# 如何仅在其中设置位置变量';是父类,而不是每个继承的类?,c#,C#,我目前有4个继承可构建类的类。对于每个派生类,我必须在每次继承可构建类时设置它的位置。有没有办法让这个更干净?我认为显示代码会使它更容易理解 public class BuildableData { public Vector3 position; } public class StockpileData : BuildableData { public int woodCount = 0; public static StockpileData Create(Sto

我目前有4个继承可构建类的类。对于每个派生类,我必须在每次继承可构建类时设置它的位置。有没有办法让这个更干净?我认为显示代码会使它更容易理解

public class BuildableData
{
    public Vector3 position;
}

public class StockpileData : BuildableData
{
    public int woodCount = 0;

    public static StockpileData Create(Stockpile stockpile)
    {
        return new StockpileData
        {
            position = stockpile.transform.position,
            woodCount = stockpile.WoodCount
        };
    }
}

public class HouseData : BuildableData
{
    public static HouseData Create(House house)
    {
        return new HouseData
        {
            position = house.transform.position, // I'm talking about this one? I have to set it everytime I inherit BuildableData
        };
    }
}

有没有办法通过将对象传递给构造函数或使用反射来自动设置它?

AutoMapper是解决上述问题的合适库,因为它有助于将一个对象的属性映射到另一个对象的属性。下面的代码片段将有助于在项目中配置相同的代码

using AutoMapper;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {

            var mappingConfig = new MapperConfiguration(mc =>
            {
                mc.AddProfile(new MappingProfile());
            });

            var mapper = mappingConfig.CreateMapper();

            var house = new House();
            var houseData = mapper.Map<HouseData>(house);

            var stockpile = new Stockpile();
            var stockpileData = mapper.Map<StockpileData>(stockpile);
        }
    }

    public class MappingProfile : Profile
    {
        public MappingProfile()
        {
            CreateMap<House, HouseData>()
                .ForMember(destination => destination.Position,
                           source => source.MapFrom(m => m.transform.Position));

            CreateMap<Stockpile, StockpileData>()
                .ForMember(destination => destination.Position,
                           source => source.MapFrom(m => m.transform.Position));
        }
    }
}
使用AutoMapper;
名称空间控制台
{
班级计划
{
静态void Main(字符串[]参数)
{
var mappingConfig=新的MapperConfiguration(mc=>
{
mc.AddProfile(新的MappingProfile());
});
var mapper=mappingConfig.CreateMapper();
var house=新房子();
var houseData=mapper.Map(房子);
var库存=新库存();
var stockdata=mapper.Map(库存);
}
}
公共类映射配置文件:配置文件
{
公共映射配置文件()
{
CreateMap()
.ForMember(destination=>destination.Position,
source=>source.MapFrom(m=>m.transform.Position));
CreateMap()
.ForMember(destination=>destination.Position,
source=>source.MapFrom(m=>m.transform.Position));
}
}
}

AutoMapper是解决上述问题的合适库,因为它有助于将一个对象的属性映射到另一个对象的属性。下面的代码片段将有助于在项目中配置相同的代码

using AutoMapper;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {

            var mappingConfig = new MapperConfiguration(mc =>
            {
                mc.AddProfile(new MappingProfile());
            });

            var mapper = mappingConfig.CreateMapper();

            var house = new House();
            var houseData = mapper.Map<HouseData>(house);

            var stockpile = new Stockpile();
            var stockpileData = mapper.Map<StockpileData>(stockpile);
        }
    }

    public class MappingProfile : Profile
    {
        public MappingProfile()
        {
            CreateMap<House, HouseData>()
                .ForMember(destination => destination.Position,
                           source => source.MapFrom(m => m.transform.Position));

            CreateMap<Stockpile, StockpileData>()
                .ForMember(destination => destination.Position,
                           source => source.MapFrom(m => m.transform.Position));
        }
    }
}
使用AutoMapper;
名称空间控制台
{
班级计划
{
静态void Main(字符串[]参数)
{
var mappingConfig=新的MapperConfiguration(mc=>
{
mc.AddProfile(新的MappingProfile());
});
var mapper=mappingConfig.CreateMapper();
var house=新房子();
var houseData=mapper.Map(房子);
var库存=新库存();
var stockdata=mapper.Map(库存);
}
}
公共类映射配置文件:配置文件
{
公共映射配置文件()
{
CreateMap()
.ForMember(destination=>destination.Position,
source=>source.MapFrom(m=>m.transform.Position));
CreateMap()
.ForMember(destination=>destination.Position,
source=>source.MapFrom(m=>m.transform.Position));
}
}
}