Skip to main content
Added code example
Source Link

I'm looking at different patterns and techniques for implementing logic to convert object from one class to another, and the most elegant seems to be explicit cast operator overloading (in C#). However, it seems to me that it violates the Dependency Inversion principle, as it requires one concrete class to have references to another concrete class.

Is this assessment accurate? Is it problematic? Is there a way to implement explicit cast operator overloading without violating the DI principle?

public class Model
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

public class ViewModel
{
    public string PropOne { get; set; }

    public static explicit operator ViewModel(Model model)
    {
        // Conversion logic that references both classes
    }
}

public class Program
{
    public void Main()
    {
        var model = new Model{ Prop1 = "SomeValue", Prop2 = "SomeOtherValue" };
        var viewModel = (ViewModel) model;

        Console.WriteLine(viewModel.PropOne); // Outputs "SomeValue" to the console
        Console.ReadKey();
    }
}

I'm looking at different patterns and techniques for implementing logic to convert object from one class to another, and the most elegant seems to be explicit cast operator overloading (in C#). However, it seems to me that it violates the Dependency Inversion principle, as it requires one concrete class to have references to another concrete class.

Is this assessment accurate? Is it problematic? Is there a way to implement explicit cast operator overloading without violating the DI principle?

I'm looking at different patterns and techniques for implementing logic to convert object from one class to another, and the most elegant seems to be explicit cast operator overloading (in C#). However, it seems to me that it violates the Dependency Inversion principle, as it requires one concrete class to have references to another concrete class.

Is this assessment accurate? Is it problematic? Is there a way to implement explicit cast operator overloading without violating the DI principle?

public class Model
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

public class ViewModel
{
    public string PropOne { get; set; }

    public static explicit operator ViewModel(Model model)
    {
        // Conversion logic that references both classes
    }
}

public class Program
{
    public void Main()
    {
        var model = new Model{ Prop1 = "SomeValue", Prop2 = "SomeOtherValue" };
        var viewModel = (ViewModel) model;

        Console.WriteLine(viewModel.PropOne); // Outputs "SomeValue" to the console
        Console.ReadKey();
    }
}
Source Link

Does implicit and explicit cast operator overloading violate the D in SOLID principles of OO?

I'm looking at different patterns and techniques for implementing logic to convert object from one class to another, and the most elegant seems to be explicit cast operator overloading (in C#). However, it seems to me that it violates the Dependency Inversion principle, as it requires one concrete class to have references to another concrete class.

Is this assessment accurate? Is it problematic? Is there a way to implement explicit cast operator overloading without violating the DI principle?