2013-11-30 1 views
0
[Export(typeof(IExample))] 
internal class Example : IExample 
{ 
    private static IEnumerable<string> Process() 
    { 
     // do stuff and yeild return 
    } 

    private HashSet<string> myHash = new HashSet<string>(Process()); 

    public someType MemberFunction(typeA _a, typeB _b, typeC _c) 
    { 
     if(!myHash.Contains(/* blah blah */)) 

     // do more stuff and return 
    } 
} 

Примечание: MemberFunction() имеет 20+ ссылки в остальной части проекта.Доступ предупреждение Модификатор с внутренним классом и частных реквизита

Тем не менее, я получаю CA1811:

CA1811 Избегайте неуравненный личный код 'Example.Process) (', кажется, не имеют никакой вверх по течению общественности или защищенные звонков.

Есть ли способ обойти это, не подавляя это предупреждение?

+0

Почему бы не написать точное предупреждение? –

+0

@KingKing, сделано. – Annie

+0

@RohitVats, 'Process()' результат передается конструктору 'myHash'! – Annie

ответ

2

По какой-то причине ваш класс выглядит internal, но вы находитесь Export.

Ваш компилятор может видеть только тот факт, что он является внутренним, и что ваша функция не вызывается изнутри сборки, в которой находится ваш класс. Она не может видеть за черной магией вашего экспорта/импорта.

Если вы Export что-то, это должно быть общедоступным. В этом весь смысл.

+1

Вы уверены? Мое намерение заключается в том, чтобы разработчик знал, что его там, поэтому в будущем они не реализуют его с помощью 'IEaxmple', но неявно вызывают внутреннюю реализацию из другого интерфейса. Подобно сборкам «Microsoft.Html.Core», «Microsoft.Less.Core» и «Microsoft.Css.Core» (для AST и синтаксического анализа) есть множество таких внутренних (но выставленных на сборку) классов. – Annie