StateManagedCollection クラスとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > StateManagedCollection クラスの意味・解説 

StateManagedCollection クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

IStateManager オブジェクト管理する厳密に指定されすべてのコレクション基本クラス提供します

名前空間: System.Web.UI
アセンブリ: System.Web (system.web.dll 内)
構文構文

Public MustInherit Class
 StateManagedCollection
    Implements IList, ICollection, IEnumerable, IStateManager
Dim instance As StateManagedCollection
public abstract class StateManagedCollection
 : IList, ICollection, IEnumerable, 
    IStateManager
public ref class StateManagedCollection abstract
 : IList, ICollection, IEnumerable, 
    IStateManager
public abstract class StateManagedCollection
 implements IList, ICollection, 
    IEnumerable, IStateManager
public abstract class StateManagedCollection
 implements IList, ICollection, 
    IEnumerable, IStateManager
解説解説

StateManagedCollection クラスは、IStateManager 要素格納される厳密に指定されすべてのコレクション基本クラスです。たとえば、DataControlFieldCollection、ParameterCollection、StyleCollection、TreeNodeBindingCollection などがありますStateManagedCollection コレクションは、それ自身の状態と含まれる要素の状態と管理します。したがって、System.Web.UI.IStateManager.SaveViewState の呼び出しによって、そのコレクションの状態と、そのコレクションに現在格納されているすべての要素の状態が保存されます。

StateManagedCollection クラスからの派生において、注意要する重要なメソッドは CreateKnownType、GetKnownTypes、OnValidate、SetDirty、および SetDirtyObject です。CreateKnownType メソッドGetKnownTypes メソッドは、コレクション要素の型のインデックスビューステート格納する目的使用されます。全修型名ではなくインデックス格納することにより、パフォーマンス向上しますOnValidate メソッドは、コレクション要素操作されるときに呼び出されビジネス ルールに従ってその要素検証します。現在、OnValidate メソッド実装により、null 参照 (Visual Basic では Nothing) オブジェクトコレクション格納できないよになっていますが、このメソッドオーバーライドすることにより、派生型において独自の検証動作を定義できますSetDirty メソッドは、前回読み込み以降、状態に対して行われた変更のみをシリアル化するのではなく強制的にコレクション全体ビューステートシリアル化ます。SetDirtyObject メソッドは、要素レベルでこの同じ動作実行するために実装できる抽象メソッドです。

注意に関するメモ注意

StateManagedCollection は、コレクション項目のアセンブリ修飾型名ビューステート格納しますサイト訪問者は、ビューステートデコードして型名取得できますこのようにすると Web サイトセキュリティ上の問題がある場合は、手動型名暗号化してからビューステート格納できます

使用例使用例

IStateManager オブジェクト格納する厳密に指定されコレクション クラスStateManagedCollection から派生して作成する方法次のコード例示します。この例では、CycleCollection は、Bicycle オブジェクトTricycle オブジェクト両方を含む、抽象 Cycle クラスインスタンス格納するための派生クラスです。Cycle クラスは、ビューステートCycleColor プロパティ値を格納するため、IStateManager インターフェイス実装しています。

Imports System
Imports System.Security.Permissions
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Web
Imports System.Web.UI
 
Namespace Samples.AspNet.VB.Controls
    '////////////////////////////////////////////////////////////
    '
    ' The strongly typed CycleCollection class is a collection
    ' that contains Cycle class instances, which implement the
    ' IStateManager interface.
    '
    '////////////////////////////////////////////////////////////
    <AspNetHostingPermission(SecurityAction.Demand, _
        Level:=AspNetHostingPermissionLevel.Minimal)> _
                   Public NotInheritable Class
 CycleCollection
        Inherits StateManagedCollection

        Private Shared _typesOfCycles() As
 Type = _
            {GetType(Bicycle), GetType(Tricycle)}

        Protected Overrides Function
 CreateKnownType(ByVal index As Integer)
 As Object
            Select Case index
                Case 0
                    Return New Bicycle()
                Case 1
                    Return New Tricycle()
                Case Else
                    Throw New ArgumentOutOfRangeException("Unknown
 Type")
            End Select

        End Function


        Protected Overrides Function
 GetKnownTypes() As Type()
            Return _typesOfCycles

        End Function


        Protected Overrides Sub
 SetDirtyObject(ByVal o As Object)
            CType(o, Cycle).SetDirty()

        End Sub
    End Class
    '////////////////////////////////////////////////////////////
    '
    ' The abstract Cycle class represents bicycles and tricycles.
    '
    '////////////////////////////////////////////////////////////

    MustInherit Public Class
 Cycle
        Implements IStateManager


        Friend Protected Sub
 New(ByVal numWheels As
 Integer) 
            MyClass.New(numWheels, "Red")

        End Sub

        Friend Protected Sub
 New(ByVal numWheels As
 Integer, ByVal color As String) 
            numOfWheels = numWheels
            CycleColor = color

        End Sub

        Private numOfWheels As Integer
 = 0    
        Public ReadOnly Property
 NumberOfWheels() As Integer 
            Get
                Return numOfWheels
            End Get
        End Property 

        Public Property CycleColor() As
 String 
            Get
                Dim o As Object
 = ViewState("Color")
                If o Is Nothing
 Then 
                    Return String.Empty
                Else  
                    Return o.ToString()
                End If            
            End Get
            Set
                ViewState("Color") = value
            End Set
        End Property


        Friend Sub SetDirty() 
            ViewState.SetDirty(True)

        End Sub

        ' Because Cycle does not derive from Control, it does not 
        ' have access to an inherited view state StateBag object.
        Private cycleViewState As StateBag

        Private ReadOnly Property
 ViewState() As StateBag 
            Get
                If cycleViewState Is Nothing
 Then
                    cycleViewState = New StateBag(False)
                    If trackingViewState Then
                        CType(cycleViewState, IStateManager).TrackViewState()
                    End If
                End If
                Return cycleViewState
            End Get
        End Property

        ' The IStateManager implementation.
        Private trackingViewState As Boolean

        ReadOnly Property IsTrackingViewState()
 As Boolean _
            Implements IStateManager.IsTrackingViewState
            Get
                Return trackingViewState
            End Get
        End Property


        Sub LoadViewState(ByVal savedState
 As Object) _
            Implements IStateManager.LoadViewState
            Dim cycleState As Object()
 = CType(savedState, Object())

            ' In SaveViewState, an array of one element is created.
            ' Therefore, if the array passed to LoadViewState has 
            ' more than one element, it is invalid.
            If cycleState.Length <> 1 Then
                Throw New ArgumentException("Invalid
 Cycle View State")
            End If

            ' Call LoadViewState on the StateBag object.
            CType(ViewState, IStateManager).LoadViewState(cycleState(0))

        End Sub


        ' Save the view state by calling the StateBag's SaveViewState
        ' method.
        Function SaveViewState() As Object
 Implements IStateManager.SaveViewState
            Dim cycleState(0) As Object

            If Not (cycleViewState Is
 Nothing) Then
                cycleState(0) = _
                CType(cycleViewState, IStateManager).SaveViewState()
            End If
            Return cycleState

        End Function


        ' Begin tracking view state. Check the private variable, because
 
        ' if the view state has not been accessed or set, then it is
 not being 
        ' used and there is no reason to store any view state.
        Sub TrackViewState() Implements IStateManager.TrackViewState
            trackingViewState = True
            If Not (cycleViewState Is
 Nothing) Then
                CType(cycleViewState, IStateManager).TrackViewState()
            End If

        End Sub
    End Class


    Public NotInheritable Class
 Bicycle
        Inherits Cycle


        ' Create a red Cycle with two wheels.
        Public Sub New()
            MyBase.New(2)

        End Sub
    End Class

    Public NotInheritable Class
 Tricycle
        Inherits Cycle


        ' Create a red Cycle with three wheels.
        Public Sub New()
            MyBase.New(3)

        End Sub
    End Class
End Namespace
namespace Samples.AspNet.CS.Controls {

    using System;
    using System.Security.Permissions;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;           
    using System.Web;
    using System.Web.UI;            
    //////////////////////////////////////////////////////////////
    //
    // The strongly typed CycleCollection class is a collection
    // that contains Cycle class instances, which implement the
    // IStateManager interface.
    //
    //////////////////////////////////////////////////////////////
    [AspNetHostingPermission(SecurityAction.Demand, 
        Level=AspNetHostingPermissionLevel.Minimal)]
    public sealed class CycleCollection : StateManagedCollection
 {
        
        private static readonly Type[] _typesOfCycles
 
            = new Type[] { typeof(Bicycle), typeof(Tricycle) };

        protected override object CreateKnownType(int
 index) {
            switch(index) {
                case 0:
                    return new Bicycle();
                case 1:
                    return new Tricycle();
                    
                default:
                    throw new ArgumentOutOfRangeException("Unknown
 Type");
            }            
        }

        protected override Type[] GetKnownTypes() {
            return _typesOfCycles;
        }

        protected override void SetDirtyObject(object
 o) {
            ((Cycle)o).SetDirty();
        }

    }
    //////////////////////////////////////////////////////////////
    //
    // The abstract Cycle class represents bicycles and tricycles.
    //
    //////////////////////////////////////////////////////////////
    public abstract class Cycle : IStateManager
 {

        protected internal Cycle(int numWheels)
 : this(numWheels, "Red"){ }
        
        protected internal Cycle(int numWheels,
 String color) {    
            numberOfWheels = numWheels;
            CycleColor = color;
        }
        
        private int numberOfWheels = 0;
        public int NumberOfWheels {
            get { return numberOfWheels; }
        }
        
        public string CycleColor {
            get { 
                object o = ViewState["Color"];
                return (null == o) ? String.Empty
 : o.ToString() ;
            }
            set {
                ViewState["Color"] = value;            
            }        
        }

        internal void SetDirty() {
            ViewState.SetDirty(true);
        }
        
        // Because Cycle does not derive from Control, it does not 
        // have access to an inherited view state StateBag object.
        private StateBag viewState;
        private StateBag ViewState {
            get {
                if (viewState == null) {
                    viewState = new StateBag(false);
                    if (isTrackingViewState) {
                        ((IStateManager)viewState).TrackViewState();
                    }
                }
                return viewState;
            }
        }

        // The IStateManager implementation.
        private bool isTrackingViewState;
        bool IStateManager.IsTrackingViewState {
            get {
                return isTrackingViewState;
            }
        }

        void IStateManager.LoadViewState(object savedState) {
            object[] cycleState = (object[]) savedState;
            
            // In SaveViewState, an array of one element is created.
            // Therefore, if the array passed to LoadViewState has 
            // more than one element, it is invalid.
            if (cycleState.Length != 1) {
                throw new ArgumentException("Invalid Cycle
 View State");
            }
            
            // Call LoadViewState on the StateBag object.
            ((IStateManager)ViewState).LoadViewState(cycleState[0]);
        }

        // Save the view state by calling the StateBag's SaveViewState
        // method.
        object IStateManager.SaveViewState() {
            object[] cycleState = new object[1];

            if (viewState != null) {
                cycleState[0] = ((IStateManager)viewState).SaveViewState();
            }
            return cycleState;
        }

        // Begin tracking view state. Check the private variable, because
 
        // if the view state has not been accessed or set, then it is
 not  
        // being used and there is no reason to store any view state.
        void IStateManager.TrackViewState() {
            isTrackingViewState = true;
            if (viewState != null) {
                ((IStateManager)viewState).TrackViewState();
            }
        }        
    }

    public sealed class Bicycle : Cycle {
    
        // Create a red Cycle with two wheels.
        public Bicycle() : base(2) {}    
    }
    
    public sealed class Tricycle : Cycle {
    
        // Create a red Cycle with three wheels.
        public Tricycle() : base(3) {}
    }

}
継承階層継承階層
System.Object
  System.Web.UI.StateManagedCollection
     派生クラス
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
StateManagedCollection メンバ
System.Web.UI 名前空間
IStateManager インターフェイス
StateBag クラス



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「StateManagedCollection クラス」の関連用語

StateManagedCollection クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



StateManagedCollection クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS