2013-03-10 3 views
0

Нашел пример, и я не понимаю, что это значит.Что такое свойство VB по умолчанию в C#?

How can I read from a DataRow or a DataReader using the same code?

Я понятия не имею, как преобразовать интерфейс и два класса в ответ на C#?

Edit: Вот код, который я хочу, чтобы преобразовать в C#:

Interface IIndexer 
    Default ReadOnly Property Item(ByVal index As String) 
End Interface 

Class DataReaderWrapper 
Implements IIndexer 

Private ReadOnly _reader As IDataReader 

Public Sub New(reader As IDataReader) 
    _reader = reader 
End Sub 

Public ReadOnly Property Item(index As String) As Object Implements IIndexer.Item 
    Get 
     Return _reader(index) 
    End Get 
End Property 
End Class 

Class DataRowWrapper 
Implements IIndexer 

Private ReadOnly _row As DataRow 

Public Sub New(row As DataRow) 
    _row = row 
End Sub 

Public ReadOnly Property Item(index As String) As Object Implements IIndexer.Item 
    Get 
     Return _row(index) 
    End Get 
End Property 
End Class 
+3

Там нет аналога в C# для свойства VB.NET по умолчанию. – Oded

+1

Matti, что вы пытаетесь преобразовать .. почему бы не вставить код здесь, который вы пытаетесь преобразовать или хотите преобразовать. – MethodMan

+0

Это должно «ответить» на проблему с помощью свойства 'default': http: // stackoverflow. com/questions/40730/how-do-you-give-ac-sharp-auto-property-a-default-value – jAC

ответ

1

Там насколько мне известно, не эквивалент. Более подробную информацию о ключе Default можно найти в MSDN.

Что вы видите здесь: Indexer in an Interface.

Преобразованный код будет что-то вроде следующего:

interface IIndexer 
{ 
    object this[string index] { get; } 
} 

class DataReaderWrapper : IIndexer 
{ 
    private readonly IDataReader _reader; 
    public DataReaderWrapper(IDataReader reader) 
    { 
     _reader = reader; 
    } 

    public object this[string index] 
    { 
     get { return _reader[index]; } 
    } 
} 

class DataRowWrapper : IIndexer 
{ 
    private readonly DataRow _row; 
    public DataRowWrapper(DataRow row) 
    { 
     _row = row; 
    } 

    public object this[string index] 
    { 
     get { return _row[index]; } 
    } 
} 
+0

Спасибо большое! Это выглядит чем-то, что мне нужно. –

0

Что-то, как это будет работать, то неясно, что вы имеете в виду под «свойством по умолчанию»:

var loadedItems = new List<Item>(); 
SqlDataReader dr = GetItemsDataReader(); 
while(dr.Read()){ 
    Item item = GetItemFromData(dr); 
    loadedItems.Add(item); 
} 

private Item GetItemFromData(SqlDataReader dr){ 
    var loadedItem = new Item(); 
    loadedItem.ID = dr["ID"]; 
    loadedItem.Name = dr["Name"]; 
    'etc., etc.' 
    Return loadedItem 
} 
+0

Я имею в виду: значение свойства ReadOnly по умолчанию (индекс ByVal As String) –

+0

[свойства по умолчанию] (http://msdn.microsoft.com/en-gb/library/az06zx4y.aspx) – Oded

+0

@Oded: в примерах, которые я нашел в Интернете они всегда имеют тип типа As Interger int the end, но элемент интерфейса не имеет. –

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