2015-10-14 2 views
-5

Таким образом, в моем интерфейсе я написал это:Реализация свойства строки на массив типа интерфейса

public interface IFileExport 
{ 
    string[] FileHeaders { get; set; } 
} 

И в моем классе что-то вроде этого:

public class AdditionsFileExport: IFileExport 
{ 
    public string[] FileHeaders { 
     get 
     { 
      return new string["wwwe", "sdd", "e3rs"]; 
     } 
     set { FileHeaders = value; } } 
} 

Но я получаю две ошибки:

  1. Невозможно неявно преобразовать строку типа в int. (В разделе GET )
  2. Функция рекурсивна по всему пути. (В разделе SET)

Какие ошибки я сделал и что является правильным способом?

+1

Часть '' '' 'должна быть целым числом для указания размера или оставить пустым и предоставленные значения (в' {''} '). – crashmstr

+2

Поскольку ваш 'get' возвращает только определенные значения, вам (по-видимому) не нужно' set' вообще. В противном случае вам нужно изменить оба параметра, чтобы использовать опорную переменную. – crashmstr

+0

Ответ Денниса правильный. Кстати, вы не должны публиковать массивы публично. Если вы включили анализ кода, тогда вы получите предупреждения, –

ответ

3

Ваше объявление или массив синтаксически неверны.

public class AdditionsFileExport: IFileExport 
{   
    // "wwwe", "sdd", "e3rs" will be default values 
    private string[] fileHeaders = new[] { "wwwe", "sdd", "e3rs" }; 
    public string[] FileHeaders 
    { 
     get { return fileHeaders; } 
     set { fileHeaders = value; } 
    } 
} 

Если вам нужна только для чтения свойство, удалить сеттер и объявить fileHeaders с readonly ключевого слова.

Обратите внимание, что это:

public class AdditionsFileExport: IFileExport 
{   
    public string[] FileHeaders 
    { 
     get { return new[] { "wwwe", "sdd", "e3rs" }; } 
    } 
} 

не путь, потому что каждый раз, когда вы звоните FileHeaders, вы создаете новый экземпляр массива. Таким образом, это утверждение не получится:

var foo = new AdditionsFileExport(); 
Debug.Assert(foo.FileHeaders == foo.FileHeaders); 

Также обратите внимание, что массив не хороший тип возврата в целом, потому что вы не можете изменить реализацию свойства, например, таким образом:

public class AdditionsFileExport: IFileExport 
{   
    private readonly fileHeaders = new List<string> 
    { 
     "wwwe", "sdd", "e3rs" 
    }; 

    public string[] FileHeaders 
    { 
     // won't compile, because List<> isn't array 
     get { return fileHeaders; } 
    } 
} 

IEnumerable<string> будет лучшим выбором здесь.

+0

Хорошо, если он объявит fileHeaders только для чтения, тогда задание даст ошибку, –

+0

@FaisalHafeez: «Если вам нужно свойство readonly». В противном случае резервное поле не должно быть только для чтения. – Dennis

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