У меня есть структура с именами Foo
и Bar
- обе, если они реализуют интерфейс с именем IFoo
.
public interface IFoo
{
string StrTest { get; set; }
int NumTest { get; set; }
}
public struct Foo : IFoo
{
public Foo(string backTest, int numTest)
{
StrTest = backTest;
NumTest = numTest;
}
public string StrTest { get; set; }
public int NumTest { get; set; }
}
public struct Bar : IFoo
{
public Bar(string backTest, int numTest)
{
StrTest = backTest;
NumTest = numTest;
}
public string StrTest { get; set; }
public int NumTest { get; set; }
}
Допустим, у меня есть массив IFoo
с индексом "0 "У меня есть Foo
структура.Проблема возникает, когда я перемещаю эту структуру в новый индекс, такой как «1» (который должен скопировать его).Теперь вы ожидаете, что оба они будут разделены, то есть вы меняете одно и другое не должно также меняться .
Однако я считаю, что еслиЯ изменяю одно из свойств для вновь перемещенного - меняются оба ... разве это не class
(тип ссылки) функциональность?
Взгляните на следующий пример:
// Create a list of "BackInterface"s - with foo and bar.
List<IFoo> arr = new List<IFoo>
{
new Foo("A", 2),
new Bar("B", 4)
};
// Now, place the SAME struct at index "0" (the foo) at the end - it should be copied?
arr.Add(arr[0]);
// Modify the item at the last newly-created index
arr[2].StrTest = "C";
И arr[0]
, и arr[2]
* StrTest
теперь "C"
.
Если у меня массив всего Foo
или Bar
, у меня нет этой проблемы -только когда у меня есть массив IFoo
.Я также пробовал обычные массивы (типа "object
) и ArrayList
(у которых нет универсальных шаблонов) - ни один из них не работал.
Есть идеи, что здесь происходит, и как по-прежнему иметь возможность иметь массив как Foo
, так и Bar
, оба должны иметь реализацию чего-либо?