Действительно ли возможно использовать indexers
с extension
методы.
например, Рассмотрите это как пример только.
public static object SelectedValue(this DataGridView dgv, string ColumnName)
{
return dgv.SelectedRows[0].Cells[ColumnName].Value;
}
Править
использование mygrid.SelectedValue("mycol")
Как использовать его в качестве индексатора mygrid.SelectedValue["mycol"]
вместо выше одного.
Действительно ли возможно использовать его как это также? mygrid.SelectedValue["mycol"](out somevalue);
Что является синтаксисом получения этого вида значений. Любой простой пример или ссылка будут работать.
Ну, здесь есть две проблемы:
SelectedValue
свойством, возвращающим что-то индексируемое вместо негоТак что нет, синтаксис, который вы там указали, не будет работать. Вы могли бы заставить это работать:
mygrid.SelectedValue()["mycol"]
но это немного некрасиво. На вашем месте я бы придерживался формы метода.
1 C# 4 поддерживает вызов именованных индексаторов на COM-объектах.
Позвольте мне попытаться прояснить использование и намерения Extension Method
.
Рассмотрим метод расширения
public static bool IsNullOrEmpty(this string source)
{
return source == null || source == string.Empty;
}
Теперь вы расширяете свой класс string
с помощью этого метода расширения
var myString = "Hello World";
Assert.AreEqual(myString.IsNullOrEmpty(), false);
Вот что делает .NET при компиляции:
public static bool IsNullOrEmpty(string source)
{
return source == null || source == string.Empty;
}
Используя наш старый school
var myString = "Hello World";
Assert.AreEqual(IsNullOrEmpty(myString), false);
Метод расширения - это не что иное, как визуализация того, что мы привыкли делать.
Что ж, расширение индексаторов возможно, но Microsoft не думала об этом.