Ваш пример кода довольно запутанный и не компилируется.Однако, чтобы ответить на ваш вопрос о синтаксисе List<T>.this
:
Это называется явная реализация интерфейса .Вы используете это для реализации интерфейса, но скрываете его от публичной подписи класса.Вот небольшой пример:
public class Foo : IDisposable {
public void Dispose() {
}
}
public class Bar : IDisposable {
public void Close() {
}
void IDisposable.Dispose() {
Close();
}
}
Оба класса реализуют IDisposable
, но для утилизации Bar
вам придется вызвать Close
.Вы также можете привести его к IDisposable
и затем вызвать Dispose
.
var foo = new Foo();
foo.Dispose();
var bar = new Bar();
bar.Close();
((IDisposable) bar).Dispose();
Для классов Foo
и Bar
это может не иметь значения, если метод очистки вызывается Dispose
или Close
, но для класса File
вы можете предпочесть Close
вместо Dispose
.Другое использование состоит в том, чтобы скрыть интерфейс, который вы должны реализовать для участия во взаимодействии между объектами, но вы не хотите быть видимым для потребителей вашего класса.Или вы можете использовать его, чтобы обойти реализацию нескольких интерфейсов с конфликтующими методами.
Вы можете прочитать о явной реализации интерфейса в MSDN.