VirtualPathProvider クラス

定義

Web アプリケーションによって仮想ファイル システムのリソースを取得できるようにする一連のメソッドが用意されています。

public ref class VirtualPathProvider abstract : MarshalByRefObject
public abstract class VirtualPathProvider : MarshalByRefObject
type VirtualPathProvider = class
    inherit MarshalByRefObject
Public MustInherit Class VirtualPathProvider
Inherits MarshalByRefObject
継承
VirtualPathProvider

次のコード例は、オブジェクトに VirtualPathProvider 格納されている情報を使用して仮想ファイル システムを作成するクラス実装です DataSet 。 このコード例では、 クラスと VirtualDirectory クラスのコード例VirtualFileを使用して、オブジェクトに読み込まれるデータ ストアから仮想リソースをDataSet提供します。

この例には、クラス実装VirtualPathProvider、オブジェクトの設定DataSetに使用される XML データ ファイル、AppStartコンパイル システムにクラスを登録VirtualPathProviderするために使用するメソッドを含むAppInitializeオブジェクト、および仮想ファイルへのリンクを提供する ASP.NET ページの 4 つの部分があります。

アプリケーションでこのサンプル コードを使用するには、次の手順に従います。

  1. Web サーバー上にサンプル アプリケーションを作成します。

  2. カスタム VirtualPathProvider オブジェクトのソース コード (以下を参照) を、アプリケーションのディレクトリ内の App_Code ファイルにコピーします。

  3. カスタム VirtualDirectory オブジェクトのソース コード (クラスの概要トピックの「例」セクションを VirtualDirectory 参照) を、アプリケーションのディレクトリ内の App_Code ファイルにコピーします。

  4. カスタム VirtualFile オブジェクトのソース コード (クラスの概要トピックの「例」セクションを VirtualFile 参照) を、アプリケーションのディレクトリ内の App_Code ファイルにコピーします。

  5. オブジェクトのソース コード AppStart (以下を参照) を、アプリケーションのディレクトリ内の App_Code ファイルにコピーします。

  6. XML データ (以下を参照) を、 という名前 XMLData.xml のファイルにアプリケーションのディレクトリ内の App_Data ファイルにコピーします。

  7. ファイル ( default.aspx 以下を参照) をサンプル アプリケーションのルート ディレクトリにコピーします。 Web ブラウザーを使用してファイルを default.aspx 開き、ページ上のリンクをクリックして仮想ファイルの内容を表示します。

最初の例はカスタム VirtualPathProvider クラスです。 DirectoryExistsおよび FileExists メソッドは、要求されたディレクトリが仮想ファイル システムに存在するかどうかを示すためにオーバーライドされます。 GetDirectoryメソッドと GetFile メソッドは、仮想ファイル システムから情報を含むカスタム VirtualDirectory インスタンスと VirtualFile インスタンスを返すようにオーバーライドされます。

クラスには、 クラスと VirtualFile クラスがVirtualDirectory仮想ファイル システム データを含むオブジェクトにDataSetアクセスするために使用するメソッドも用意GetVirtualDataされています。 運用環境の実装では、このメソッドは通常、データ ストアとの対話を担当するビジネス オブジェクトに実装されます。

using System;
using System.Data;
using System.Security.Permissions;
using System.Web;
using System.Web.Caching;
using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Medium)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.High)]
  public class SamplePathProvider : VirtualPathProvider
  {
    private string dataFile;

    public SamplePathProvider()
      : base()
    {
    }

    protected override void Initialize()
    {
      // Set the datafile path relative to the application's path.
      dataFile = HostingEnvironment.ApplicationPhysicalPath + "App_Data\\XMLData.xml";
    }

    /// <summary>
    ///   Data set provider for the SampleVirtualDirectory and
    ///   SampleVirtualFile classes. In a production application
    ///   this method would be on a provider class that accesses
    ///   the virtual resource data source.
    /// </summary>
    /// <returns>
    ///   The System.Data.DataSet containing the virtual resources 
    ///   provided by the SamplePathProvider.
    /// </returns>
    public DataSet GetVirtualData()
    {
      // Get the data from the cache.
      DataSet ds = (DataSet)HostingEnvironment.Cache.Get("VPPData");
      if (ds == null)
      {
        // Data not in cache. Read XML file.
        ds = new DataSet();
        ds.ReadXml(dataFile);

        // Make DataSet dependent on XML file.
        CacheDependency cd = new CacheDependency(dataFile);

        // Put DataSet into cache for maximum of 20 minutes.
        HostingEnvironment.Cache.Add("VPPData", ds, cd,
          Cache.NoAbsoluteExpiration,
          new TimeSpan(0, 20, 0),
          CacheItemPriority.Default, null);

        // Set data timestamp.
        DateTime dataTimeStamp = DateTime.Now;
        // Cache it so we can get the timestamp in later calls.
        HostingEnvironment.Cache.Insert("dataTimeStamp", dataTimeStamp, null,
          Cache.NoAbsoluteExpiration,
          new TimeSpan(0, 20, 0),
          CacheItemPriority.Default, null);
      }
      return ds;
    }

    /// <summary>
    ///   Determines whether a specified virtual path is within
    ///   the virtual file system.
    /// </summary>
    /// <param name="virtualPath">An absolute virtual path.</param>
    /// <returns>
    ///   true if the virtual path is within the 
    ///   virtual file sytem; otherwise, false.
    /// </returns>
    private bool IsPathVirtual(string virtualPath)
    {
      String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
      return checkPath.StartsWith("~/vrdir", StringComparison.InvariantCultureIgnoreCase);
    }

    public override bool FileExists(string virtualPath)
    {
      if (IsPathVirtual(virtualPath))
      {
        SampleVirtualFile file = (SampleVirtualFile)GetFile(virtualPath);
        return file.Exists;
      }
      else
            {
                return Previous.FileExists(virtualPath);
            }
        }

    public override bool DirectoryExists(string virtualDir)
    {
      if (IsPathVirtual(virtualDir))
      {
        SampleVirtualDirectory dir = (SampleVirtualDirectory)GetDirectory(virtualDir);
        return dir.Exists;
      }
      else
            {
                return Previous.DirectoryExists(virtualDir);
            }
        }

    public override VirtualFile GetFile(string virtualPath)
    {
      if (IsPathVirtual(virtualPath))
        return new SampleVirtualFile(virtualPath, this);
      else
        return Previous.GetFile(virtualPath);
    }

    public override VirtualDirectory GetDirectory(string virtualDir)
    {
      if (IsPathVirtual(virtualDir))
        return new SampleVirtualDirectory(virtualDir, this);
      else
        return Previous.GetDirectory(virtualDir);
    }

    public override CacheDependency GetCacheDependency(
      string virtualPath, 
      System.Collections.IEnumerable virtualPathDependencies, 
      DateTime utcStart)
    {
      if (IsPathVirtual(virtualPath))
      {
        System.Collections.Specialized.StringCollection fullPathDependencies = null;

        // Get the full path to all dependencies.
        foreach (string virtualDependency in virtualPathDependencies)
        {
          if (fullPathDependencies == null)
            fullPathDependencies = new System.Collections.Specialized.StringCollection();

          fullPathDependencies.Add(virtualDependency);
        }
        if (fullPathDependencies == null)
          return null;

        // Copy the list of full-path dependencies into an array.
        string[] fullPathDependenciesArray = new string[fullPathDependencies.Count];
        fullPathDependencies.CopyTo(fullPathDependenciesArray, 0);
        // Copy the virtual path into an array.
        string[] virtualPathArray = new string[1];
        virtualPathArray[0] = virtualPath;

        return new CacheDependency(virtualPathArray, fullPathDependenciesArray, utcStart);
      }
      else
            {
                return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
            }
        }
  }
}

Imports System.Data
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.Caching
Imports System.Web.Hosting


Namespace Samples.AspNet.VB
  <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Medium), _
   AspNetHostingPermission(SecurityAction.InheritanceDemand, level:=AspNetHostingPermissionLevel.High)> _
  Public Class SamplePathProvider
    Inherits VirtualPathProvider

    Private dataFile As String

    Public Sub New()
      MyBase.New()
    End Sub

    Protected Overrides Sub Initialize()
      ' Set the datafile path relative to the application's path.
      dataFile = HostingEnvironment.ApplicationPhysicalPath & _
        "App_Data\XMLData.xml"
    End Sub

    '   Data set provider for the SampleVirtualFile and
    '   SampleVirtualDirectory classes. In a production application
    '   this method would be on a provider class that accesses
    '   the virtual resource data source.
    '   The System.Data.DataSet containing the virtual resources
    '   provided by the SamplePathProvider.
    Public Function GetVirtualData() As DataSet
      ' Get the data from the cache.
      Dim ds As DataSet
      ds = CType(HostingEnvironment.Cache.Get("VPPData"), DataSet)

      If ds Is Nothing Then
        ' Data set not in cache. Read XML file.
        ds = New DataSet
        ds.ReadXml(dataFile)

        ' Make DataSet dependent on XML file.
        Dim cd As CacheDependency
        cd = New CacheDependency(dataFile)

        ' Put DataSet into cache for maximum of 20 minutes.
        HostingEnvironment.Cache.Add("VPPData", ds, cd, _
         Cache.NoAbsoluteExpiration, _
         New TimeSpan(0, 20, 0), _
         CacheItemPriority.Default, Nothing)

        ' Set data timestamp.
        Dim dataTimeStamp As DateTime
        dataTimeStamp = DateTime.Now
        ' Cache it so we can get the timestamp in later calls.
        HostingEnvironment.Cache.Add("dataTimeStamp", dataTimeStamp, Nothing, _
          Cache.NoAbsoluteExpiration, _
          New TimeSpan(0, 20, 0), _
          CacheItemPriority.Default, Nothing)
      End If
      Return ds
    End Function

    Private Function IsPathVirtual(ByVal virtualPath As String) As Boolean
      Dim checkPath As String
      checkPath = VirtualPathUtility.ToAppRelative(virtualPath)
      Return checkPath.StartsWith("~/vrdir", StringComparison.InvariantCultureIgnoreCase)
    End Function

    Public Overrides Function FileExists(ByVal virtualPath As String) As Boolean
      If (IsPathVirtual(virtualPath)) Then
        Dim file As SampleVirtualFile
        file = CType(GetFile(virtualPath), SampleVirtualFile)
        Return file.Exists
      Else
        Return Previous.FileExists(virtualPath)
      End If
    End Function

    Public Overrides Function DirectoryExists(ByVal virtualDir As String) As Boolean
      If (IsPathVirtual(virtualDir)) Then
        Dim dir As SampleVirtualDirectory
        dir = CType(GetDirectory(virtualDir), SampleVirtualDirectory)
        Return dir.exists
      Else
        Return Previous.DirectoryExists(virtualDir)
      End If
    End Function

    Public Overrides Function GetFile(ByVal virtualPath As String) As VirtualFile
      If (IsPathVirtual(virtualPath)) Then
        Return New SampleVirtualFile(virtualPath, Me)
      Else
        Return Previous.GetFile(virtualPath)
      End If
    End Function

    Public Overrides Function GetDirectory(ByVal virtualDir As String) As VirtualDirectory
      If (IsPathVirtual(virtualDir)) Then
        Return New SampleVirtualDirectory(virtualDir, Me)
      Else
        Return Previous.GetDirectory(virtualDir)
      End If
    End Function

    Public Overrides Function GetCacheDependency(ByVal virtualPath As String, ByVal virtualPathDependencies As IEnumerable, ByVal utcStart As Date) As CacheDependency
      If (IsPathVirtual(virtualPath)) Then

        Dim fullPathDependencies As System.Collections.Specialized.StringCollection
        fullPathDependencies = Nothing

        ' Get the full path to all dependencies.
        For Each virtualDependency As String In virtualPathDependencies
          If fullPathDependencies Is Nothing Then
            fullPathDependencies = New System.Collections.Specialized.StringCollection
          End If

          fullPathDependencies.Add(virtualDependency)
        Next

        If fullPathDependencies Is Nothing Then
          Return Nothing
        End If

        Dim fullPathDependenciesArray As String()
        fullPathDependencies.CopyTo(fullPathDependenciesArray, 0)

        Return New CacheDependency(fullPathDependenciesArray, utcStart)
      Else
        Return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart)
      End If
    End Function
  End Class
End Namespace

2 番目の例は、カスタム VirtualPathProvider オブジェクトによって返されるオブジェクトをDataSet設定するために使用される XML データ ファイルです。 この XML データは、、、および VirtualFile オブジェクトをVirtualDirectoryVirtualPathProvider使用して外部データからデータを取得する方法を示すために使用され、運用品質のデータ ストアを表すものではありません。

<?xml version="1.0" encoding="utf-8" ?>  
  <resource type="dir"   
    path="/vrDir"   
    parentPath=""   
    content="">  
    <resource type="file"   
      path="/vrDir/Level1FileA.vrf"  
      parentPath="/vrDir"   
      content="This is the content of file Level1FileA.">  
    </resource>  
    <resource type="file"   
      path="/vrDir/Level1FileB.vrf"  
      parentPath="/vrDir"   
      content="This is the content of file Level1FileB.">  
    </resource>  
    <resource type="dir"   
      path="/vrDir/Level2DirA"   
      parentPath="/vrDir"   
      content="">  
    <resource type="file"   
      path="/vrDir/Level2DirA/Level2FileA.vrf"   
      parentPath="/vrDir/Level2DirA"   
      content="This is the content of file Level2FileA.">  
    </resource>  
    <resource type="file"   
      path="/vrDir/Level2DirA/Level2FileB.vrf"  
      parentPath="/vrDir/Level2DirA"   
      content="This is the content of file Level2FileB.">  
    </resource>  
  </resource>  
  <resource type="dir"   
    path="/vrDir/Level2DirB"   
    parentPath="/vrDir"   
    content="">  
    <resource type="file"   
      path="/vrDir/Level2DirB/Level2FileA.vrf"   
      parentPath="/vrDir/Level2DirB"   
      content="This is the content of file Level2FileA.">  
    </resource>  
    <resource type="file"   
      path="/vrDir/Level2DirB/Level2FileB.vrf"  
      parentPath="/vrDir/Level2DirB"   
      content="This is the content of file Level2FileB.">  
    </resource>  
  </resource>  
</resource>  

3 番目の例では、 メソッドを AppStart 含む オブジェクトを AppInitialize 提供します。 このメソッドは、必要なカスタム初期化を実行するために、ASP.NET アプリケーションの初期化中に呼び出されます。 この場合は、カスタム VirtualPathProvider オブジェクトを ASP.NET ビルド システムに登録します。

using System.Web.Hosting;

namespace Samples.AspNet.CS
{
  /// <summary>
  ///   Contains the application initialization method
  ///   for the sample application.
  /// </summary>
  public static class AppStart
  {
    public static void AppInitialize()
    {
      SamplePathProvider sampleProvider = new SamplePathProvider();
      HostingEnvironment.RegisterVirtualPathProvider(sampleProvider);
    } 
  }
}

Imports System.Web.Hosting

Namespace Samples.AspNet.VB

  Public Class AppStart

    Public Shared Sub AppInitialize()
      Dim sampleProvider As SamplePathProvider = New SamplePathProvider()
      HostingEnvironment.RegisterVirtualPathProvider(sampleProvider)
    End Sub

  End Class
End Namespace

最後の例は、仮想ファイル システムに含まれる仮想ファイルへのリンクを含む ASP.NET ページです。


<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Virtual Path Provider Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:HyperLink ID="hyperLink1" runat="server" NavigateUrl="vrDir/Level1FileA.vrf" Text="Level 1, File A" /><br />
    <asp:HyperLink ID="hyperLink2" runat="server" NavigateUrl="vrDir/Level1FileB.vrf" Text="Level 1, File B" /><br />
    <asp:HyperLink ID="hyperLink3" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileA.vrf" Text="Level 2a, File A" /><br />
    <asp:HyperLink ID="hyperLink4" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileB.vrf" Text="Level 2a, File B" /><br />
    <asp:HyperLink ID="hyperLink5" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileA.vrf" Text="Level 2b, File A" /><br />
    <asp:HyperLink ID="hyperLink6" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileB.vrf" Text="Level 2b, File B" /><br />
  </form>
</body>
</html>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Virtual Path Provider Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:HyperLink ID="hyperLink1" runat="server" NavigateUrl="vrDir/Level1FileA.vrf" Text="Level 1, File A" /><br />
    <asp:HyperLink ID="hyperLink2" runat="server" NavigateUrl="vrDir/Level1FileB.vrf" Text="Level 1, File B" /><br />
    <asp:HyperLink ID="hyperLink3" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileA.vrf" Text="Level 2a, File A" /><br />
    <asp:HyperLink ID="hyperLink4" runat="server" NavigateUrl="vrDir/Level2DirA/Level2FileB.vrf" Text="Level 2a, File B" /><br />
    <asp:HyperLink ID="hyperLink5" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileA.vrf" Text="Level 2b, File A" /><br />
    <asp:HyperLink ID="hyperLink6" runat="server" NavigateUrl="vrDir/Level2DirB/Level2FileB.vrf" Text="Level 2b, File B" /><br />
  </form>
</body>
</html>

注釈

クラスには VirtualPathProvider 、Web アプリケーション用の仮想ファイル システムを実装するための一連のメソッドが用意されています。 仮想ファイル システムでは、ファイルとディレクトリは、サーバーのオペレーティング システムによって提供されるファイル システム以外のデータ ストアによって管理されます。 たとえば、仮想ファイル システムを使用して、SQL Server データベースにコンテンツを格納できます。

要求に応じて処理される任意のファイルを仮想ファイル システムに格納できます。 これには次のものが含まれます

  • ページ、マスター ページ、ユーザー コントロール、およびその他のオブジェクトを ASP.NET します。

  • .htmや.jpgなどの拡張機能を含む標準 Web ページ。

  • インスタンスに BuildProvider マップされたカスタム拡張機能。

  • フォルダー内の任意の App_Theme 名前付きテーマ。

アプリケーション レベルのアセンブリを生成 ASP.NET アプリケーション フォルダーまたはファイルを仮想ファイル システムに格納することはできません。 これには次のものが含まれます

  • Global.asax ファイル。

  • Web.config ファイル。

  • によって XmlSiteMapProvider使用されるサイト マップ データ ファイル。

  • アプリケーション アセンブリを含むディレクトリ、またはアプリケーション アセンブリを生成するディレクトリ: BinApp_CodeApp_GlobalResources、任意 App_LocalResources

  • アプリケーション データ フォルダー 。 App_Data

注意

Web サイトが展開用にプリコンパイルされている場合、インスタンスによって VirtualPathProvider 提供されるコンテンツはコンパイルされず、プリコンパイル済みサイトではインスタンスは使用されません VirtualPathProvider

VirtualPathProvider の登録

カスタム VirtualPathProvider インスタンスは、Web アプリケーションによってページの解析またはコンパイルが実行される前に、 メソッドを HostingEnvironment.RegisterVirtualPathProvider 使用して ASP.NET コンパイル システムに登録する必要があります。

通常、VirtualPathProviderインスタンスは、ディレクトリでAppInitialize定義されているメソッド、またはファイル内の App_Code イベント中にApplication_StartGlobal.asax登録されます。 メソッドにインスタンスAppInitializeを登録するVirtualPathProvider例については、「例」セクションを参照してください。

他のイベントの間にインスタンスを VirtualPathProvider 登録することはできますが、インスタンスが登録される前に VirtualPathProvider コンパイルおよびキャッシュされたページは、新しい VirtualPathProvider インスタンスが以前にコンパイルしたページのソースを提供する場合でも無効になりません。

注意 (実装者)

から VirtualPathProvider継承する場合は、次のメンバーをオーバーライドする必要があります。

カスタム VirtualPathProvider クラスで仮想ファイル システム内のディレクトリがサポートされている場合は、次のメンバーをオーバーライドする必要があります。

  • DirectoryExists(String)

  • GetDirectory(String)

    注: 仮想ファイル システムに Web サイトのテーマが含まれる場合 (仮想 App_Themes ディレクトリを作成することによって)、カスタム VirtualPathProvider クラスでディレクトリをサポートする必要があります。

    カスタム VirtualPathProvider クラスは、 クラスと クラスから VirtualFile 派生したクラスで VirtualDirectory 動作します。 これらの型の派生クラスを実装して、仮想ファイル システムからファイルとディレクトリの情報を提供する必要があります。 カスタム VirtualFile 実装の例については、クラスの概要に関するトピックの「例」セクションを VirtualFile 参照してください。 カスタム VirtualDirectory 実装の例については、クラスの概要に関するトピックの「例」セクションを VirtualDirectory 参照してください。

コンストラクター

VirtualPathProvider()

継承クラス インスタンスによって使用されるクラスを初期化します。 このコンストラクターは、継承クラスによってのみ呼び出すことができます。

プロパティ

Previous

コンパイル システム内の以前に登録済みの VirtualPathProvider オブジェクトへの参照を取得します。

メソッド

CombineVirtualPaths(String, String)

ベース パスと相対パスを結合して、仮想リソースへの絶対パスを返します。

CreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。

(継承元 MarshalByRefObject)
DirectoryExists(String)

仮想ファイル システムにディレクトリが存在するかどうかを示す値を取得します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
FileExists(String)

仮想ファイル システムにファイルが存在するかどうかを示す値を取得します。

GetCacheDependency(String, IEnumerable, DateTime)

指定した仮想パスに基づいてキャッシュの依存関係を作成します。

GetCacheKey(String)

指定した仮想パスで使用されるキャッシュ キーを返します。

GetDirectory(String)

仮想ファイル システムから仮想ディレクトリを取得します。

GetFile(String)

仮想ファイル システムから仮想ファイルを取得します。

GetFileHash(String, IEnumerable)

指定した仮想パスのハッシュを返します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetLifetimeService()
古い.

対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。

(継承元 MarshalByRefObject)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
Initialize()

VirtualPathProvider インスタンスを初期化します。

InitializeLifetimeService()

リースが作成されないようにすることで、VirtualPathProvider オブジェクトに無期限の有効期間を指定します。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
MemberwiseClone(Boolean)

現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。

(継承元 MarshalByRefObject)
OpenFile(String)

仮想ファイルからストリームを返します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象