2009-02-17 2 views
3

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

У меня есть перечисление как таковой:

<Flags()> _ 
Public Enum FormState 
    Read = 1 
    Edit = 2 
    Insert = 4 
End Enum 

и класс как таковой:

Public MustInherit Class Fields 
    Inherits System.Web.UI.UserControl 

    Public Property State() As Enumerators.FormState 
     Get 
      Return _State 
     End Get 

     Set(ByVal value As Enumerators.FormState) 
      _State = value 
      ToggleState(value) 
     End Set 
    End Property 

    Protected MustOverride Sub ToggleState(ByVal state As FormState) 
End Class 

При попытке скомпилировать этот код, который я оставил с предупреждением о том, что государство собственности не является совместимым с CLS, и не является аргументом . Как так? И как я могу исправить эту проблему, чтобы удалить предупреждения?

  • Я попытался добавить < CLSCompliant (True)> атрибут для обоих элементов не повезло
  • Я попытался распространить статью MSDN Non-CLS-compliant 'MustOverride' member is not allowed in a CLS-compliant в код без каких-либо результатов
  • Я ве попытался изменить аксессор к Friend вместо Public
  • Я попытался указать тип для Enum (Integer и UInteger)
+0

Если вы только собираетесь игнорировать предупреждения, почему вы заботитесь о ЦБС в первую очередь? – MichaelGG

+0

Мне интересно то же самое. –

+3

Я предпочел бы понять предупреждения и то, что они означают, тогда их прямо удалить/проигнорировать. Извините за недоразумение. –

ответ

5

Глядя на ваш код, перечисление, похоже, является частью класса, называемого перечислением. Класс не указан в вашем коде, но я предполагаю, что вы полностью контролируете его.

Класс должен быть помечен также атрибутом, совместимым с CLS.

1

Чтобы удалить предупреждения добавить следующие атрибуты, так что класс, метод и свойство выглядеть следующим образом:

<CLSCompliant(False)> _ 
Public MustInherit Class Fields 
    Inherits System.Web.UI.UserControl 

    <CLSCompliant(False)> _ 
    Public Property State() As Enumerators.FormState 
     Get 
      Return _State 
     End Get 

     Set(ByVal value As Enumerators.FormState) 
      _State = value 
      ToggleState(value) 
     End Set 
    End Property 

    <CLSCompliant(False)> _ 
    Protected MustOverride Sub ToggleState(ByVal state As FormState) 
End Class 

Это означает компилятор, что вы хотите, чтобы предупреждения удалены, и что вы знаете код не CLSCompliant.

+2

Это не просто предупреждение! Фактически вы сообщаете код, который он не может выполнять в средстве доверия или где-либо еще, что требуется CLSCompliance. Многие сканеры безопасности для запуска приложения могут помешать ему даже загружать из-за того, что этот атрибут установлен. –

0

Это может быть, что вы не имеете элемент со значением 0.

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

  • Нет связанных вопросов^_^