2015-07-07 3 views
3

Возможно ли в C# связать два объекта разных классов, но с аналогичными свойствами?Связывание двух объектов разных классов, но с аналогичными свойствами

Для примера:

class Program 
{ 
    static void Main(string[] args) 
    { 
     test t = new test(); 

     test2 t2 = new test2(); 
    } 
} 

public class test 
{ 
    public int Number { get; set; } 
} 

public class test2 
{ 
    public int Number { get; set; } 
} 

Итак, можно сказать t = t2 somewhow?

+2

Нет без какого-либо кода леса или внешней библиотеки (например, '' Automapper' (http://automapper.org/)). Возможно, вы можете точно описать, чего вы пытаетесь достичь? – DavidG

ответ

2

У вас могут быть оба класса, реализующие интерфейс, если вам не важно, какая реализация интерфейса используется.

Например:

class Program 
{ 
    static void Main(string[] args) 
    { 
     INumber t = new test(); 

     INumber t2 = new test2(); 
    } 
} 

public class test : INumber 
{ 
    public int Number { get; set; } 
} 

public class test2 : INumber 
{ 
    public int Number { get; set; } 
} 

public interface INumber 
{ 
    int Number { get; set; } 
} 

Интерфейс представляет собой своего рода контракт, который предусматривает определение, какие свойства и методы исполнителем класс должен определить. Вы можете прочитать больше на interfaceshere.

Когда ваши классы реализуют общий интерфейс, вы можете неявно преобразовывать один тип в другой тип, например, в примере выше.

0

Без добавления дополнительного кода нет, вы не можете этого сделать.

Несмотря на то, что они являются «похожими», они компилируются как совершенно разные типы и не могут быть назначены друг другу.

Теперь вы можете включить оператор implicit на одном (или обоих), чтобы обеспечить неявное литье между ними.

public class test 
{ 
    public static implicit operator test(test2 t) 
    { 
     return new test(tt.Number); 
    } 

    public static implicit operator test2(test t) 
    { 
     return new test2(t.Number); 
    } 

    public int Number { get; set; } 
} 

Но это как можно ближе к поддержке этого синтаксиса.

Смежные вопросы