ca1052: يجب أن تكون مغلقة أنواع حامل ثابت
TypeName |
StaticHolderTypesShouldBeSealed |
CheckId |
ca1052 |
Category |
Microsoft.تصميم |
تعطيل تغيير |
فصل |
السبب
نوع عامة أو محمية تحتوي على الأعضاء ثابتة فقط و هو لم يتم تعريفها مع معدل مختوم (C# مرجع)(NotInheritable (Visual Basic)).
وصف القاعدة
Th هو يفترض قاعدة التي نوع الذي يحتوي على الأعضاء ثابتة فقط هو غير مصمم لوراثة، النوع عدم توفر أي من الوظائف التي يمكن تجاوزها في نوع مشتق. نوع A التي هو لم تقصد أن تكون موروثة يجب وضع علامة مع sealedالمعدل للسماح باستخدامها كنوع أساسي.
كيف إلى الإصلاح انتهاكات
لإصلاح انتهاكا لهذه قاعدة، وضع علامة نوع ك sealed. إذا قمت يتم استهداف .NET Framework2.0 أو إصدار سابق، أسلوباً أفضل هو لوضع علامة على نوع ك static. بهذه الطريقة، فتجنب الحاجة إلى تعريف الدالة الإنشائية خاص منع فئة من الذي يتم إنشاؤه.
عند إلى منع التحذيرات
منع ظهور تحذير من القيم بالموضع هو قاعدة إلا إذا النوع هو لتحتوي تكون موروثة. غياب sealedيقترح التعديل الذي النوع هو مفيدة كنوع أساسي.
مثال انتهاك
الوصف
يلي مثال يظهر نوع يخالف قاعدة.
الرمز
Imports System
Namespace DesignLibrary
Public Class StaticMembers
Private Shared someField As Integer
Shared Property SomeProperty As Integer
Get
Return someField
End Get
Set
someField = Value
End Set
End Property
Private Sub New()
End Sub
Shared Sub SomeMethod()
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class StaticMembers
{
static int someField;
public static int SomeProperty
{
get
{
return someField;
}
set
{
someField = value;
}
}
StaticMembers() {}
public static void SomeMethod() {}
}
}
using namespace System;
namespace DesignLibrary
{
public ref class StaticMembers
{
static int someField;
StaticMembers() {}
public:
static property int SomeProperty
{
int get()
{
return someField;
}
void set(int value)
{
someField = value;
}
}
static void SomeMethod() {}
};
}
إصلاح مع معدّل ثابت
الوصف
يوضح المثال التالي كيفية إلى إصلاح انتهاكا لهذه قاعدة بوضع علامة على نوع مع staticالمعدل.
الرمز
using System;
namespace DesignLibrary
{
public static class StaticMembers
{
private static int someField;
public static int SomeProperty
{
get { return someField; }
set { someField = value; }
}
public static void SomeMethod()
{
}
public static event SomeDelegate SomeEvent;
}
public delegate void SomeDelegate();
}