مشاركة عبر


تطبيق 32 بت تشغيل في عملية مدارة حدود ذاكرة. إنشاء و قيد التشغيل خطة إنشاء بيانات

TypeName

ConsiderPassingBaseTypesAsParameters

CheckId

ca1011

Category

Microsoft.تصميم

تعطيل تغيير

فصل

السبب

يتضمن إعلان أسلوب معلمة رسمية التي هو نوع مشتق، والطريقة الوحيدة مكالمات الأعضاء النوع الأساسي للمعلمة.

وصف القاعدة

عند نوع أساس هو المحدد كمعلمة في إعلان أسلوب، أي نوع مشتق من النوع الأساسي يمكن تمرير كوسيطة المطابق للأسلوب. عند وسيطة هو استخدامها داخل نص الأسلوب، أسلوب محدد التي هو تنفيذها يعتمد تشغيل نوع وسيطة. في حالة توفير وظائف إضافية بنوع مشتق هو غير مطلوب، يتيح استخدام نوع القاعدة أسلوب استخدام أوسع.

كيف إلى الإصلاح انتهاكات

لإصلاح انتهاكا لهذه قاعدة، قم بتغيير نوع معلمة إلى النوع الأساسي الخاص به.

عند إلى منع التحذيرات

أمان لمنع ظهور تحذير من هذه قاعدة إذا أسلوب تتطلب وظيفة معينة المتوفرة حسب نوع مشتق أو لفرض أن يتم تمرير نوع مشتق، أو نوع مشتق أكثر، إلى أسلوب. في هذه الحالة، التعليمة البرمجية ستكون أكثر قوة نظراً لفحص نوع قوي الموفرة من قبل المحول البرمجي و وقت التشغيل.

مثال

يوضح المثال التالي أسلوب، ManipulateFileStream، الذي يمكن استخدامه فقط مع FileStreamالكائن، مما ينتهك هذه قاعدة. الطريقة ثانية، ManipulateAnyStream، يفي بالقاعدة بواسطة استبدال FileStreamمعلمة مع Stream.

Imports System
Imports System.IO

Namespace DesignLibrary

    Public Class StreamUser

        Sub ManipulateFileStream(ByVal stream As IO.FileStream)
            If stream Is Nothing Then Throw New ArgumentNullException("stream")

            Dim anInteger As Integer = stream.ReadByte()
            While (anInteger <> -1)
                ' Do something.
                anInteger = stream.ReadByte()
            End While
        End Sub

        Sub ManipulateAnyStream(ByVal anyStream As IO.Stream)
            If anyStream Is Nothing Then Throw New ArgumentNullException("anyStream")

            Dim anInteger As Integer = anyStream.ReadByte()
            While (anInteger <> -1)
                ' Do something.
                anInteger = anyStream.ReadByte()
            End While
        End Sub
    End Class


   Public Class TestStreams

      Shared Sub Main()
            Dim someStreamUser As New StreamUser()
            Dim testFileStream As New FileStream( _
               "test.dat", FileMode.OpenOrCreate)
            Dim testMemoryStream As New MemoryStream(New Byte() {})

            ' Cannot be used with testMemoryStream.
            someStreamUser.ManipulateFileStream(testFileStream)
            someStreamUser.ManipulateAnyStream(testFileStream)
            someStreamUser.ManipulateAnyStream(testMemoryStream)
            testFileStream.Close()
        End Sub
   End Class
End Namespace
using System;
using System.IO;

namespace DesignLibrary
{
    public class StreamUser
    {
        int anInteger;

        public void ManipulateFileStream(FileStream stream)
        {
            while ((anInteger = stream.ReadByte()) != -1)
            {
                // Do something.
            }
        }

        public void ManipulateAnyStream(Stream anyStream)
        {
            while ((anInteger = anyStream.ReadByte()) != -1)
            {
                // Do something.
            }
        }
    }

    class TestStreams
    {
        static void Main()
        {
            StreamUser someStreamUser = new StreamUser();
            MemoryStream testMemoryStream = new MemoryStream(new byte[] { });
            using (FileStream testFileStream =
                     new FileStream("test.dat", FileMode.OpenOrCreate))
            {
                // Cannot be used with testMemoryStream.
                someStreamUser.ManipulateFileStream(testFileStream);

                someStreamUser.ManipulateAnyStream(testFileStream);
                someStreamUser.ManipulateAnyStream(testMemoryStream);
            }
        }
    }
}
using namespace System;
using namespace System::IO;

namespace DesignLibrary
{
   public ref class StreamUser
   {
      int anInteger;

   public:
      void ManipulateFileStream(FileStream^ stream)
      {
         while((anInteger = stream->ReadByte()) != -1)
         {
            // Do something.
         }
      }

      void ManipulateAnyStream(Stream^ anyStream)
      {
         while((anInteger = anyStream->ReadByte()) != -1)
         {
            // Do something.
         }
      }
   };
}

using namespace DesignLibrary;

static void main()
{
   StreamUser^ someStreamUser = gcnew StreamUser();
   FileStream^ testFileStream = 
      gcnew FileStream("test.dat", FileMode::OpenOrCreate);
   MemoryStream^ testMemoryStream = 
      gcnew MemoryStream(gcnew array<Byte>{});

   // Cannot be used with testMemoryStream.
   someStreamUser->ManipulateFileStream(testFileStream);

   someStreamUser->ManipulateAnyStream(testFileStream);
   someStreamUser->ManipulateAnyStream(testMemoryStream);

   testFileStream->Close();
}

القواعد ذات الصلة

ca1059: لا يجب أن الأعضاء بتعريض بعض أنواع الخرسانة