将新创建的对象设置为等于重载构造函数中的另一个实例

本文关键字:构造函数 重载 实例 另一个 于重载 设置 新创建 创建 对象 | 更新日期: 2023-09-27 18:19:33

我可以将新创建的对象设置为类的构造函数中提供的对象吗?

我想做这样的事情:

public MyClass
{
public MyClass(MyClassDto myClassDto)
{
MyClass convertedMyClassObj = AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
//Assign the new object being created here equal to convertedMyClassObj:
this = convertedMyClassObj;    //I want to reference the current object in place of 'this'.

} 
public int MyProperty1 { get; set;}
public int MyProperty2 { get; set;}
public int MyProperty3 { get; set;}
}

我不想一处一处地做。我必须使用类似于singleton的过程来返回GetInstance()方法中复制的实例吗。因为构造函数没有返回参数。我只是想知道这是否可能。

将新创建的对象设置为等于重载构造函数中的另一个实例

您将无法执行此操作,因为无法设置this。但是您已经在使用AutoMapper,它从DTO创建对象。如果你想要一个简写,你可以使用一个静态方法。

public MyClass
{
    public static MyClass FromDto(MyClassDto myClassDto)
    {
        return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
    }
    //Properties
}

然后你就可以把它和一起使用了

var myClass = MyClass.FromDto(myClassDto);

有一个AutoMapper.Map重载,它引用了一个现有的目标对象。

public static TDestination Map<TSource, TDestination>(TSource source, TDestination destination);

您可以将其与this一起使用,以设置基于DTO:的属性

class MyClass
{
    public MyClass(MyClassDTO dto)
    {
        AutoMapper.Mapper.Map(dto, this);
    }
}    

这种方法的问题是MyClass与Automapper和MyClassDTO耦合。最好将MyClassDTOMyClass的转换职责转移到一个单独的类中。

您实际上是在谈论创建一个工厂,如果您查看工厂模式,关键是一个静态类,它负责实例化新的"东西"。所以,不,你不能像现在这样做,但如果你想封装AutoMapper逻辑,那么你可以简单地做一些事情,比如:

public static class MyClassFactory
{
    public static MyClass FromMyClassDto(MyClassDto myClassDto)
    {
        return AutoMapper.LoadEntityFromDto<MyProject.DTO.MyClassDto, MyClass>(myClassDto);
    }
}

然后:

var myClassInstance = MyClassFactory.FromMyClassDto(myClassDto);

不能在类中为this赋值。您需要重新复制这些值。