0

メソッド間でデータを渡すためにカスタム クラスを使用しています。主な機能の 1 つは画像処理であるため、クラスのプロパティとして画像パスとカスタム サム パスを使用します。プロパティの一部としてクラスに含まれているメソッドを使用したいのですが、System.IO.Pathこの方法ではできないようです。

stringタイプとしてではなくタイプを使用してこれを機能させる方法を知っているSystem.IO.Pathので、その方法を誰かに教えてもらう必要はありません。プロパティでメソッドを使用できるため、 ImagePathasを宣言できるとSystem.IO.Path非常に簡単になると思います。型の宣言についての理解が欠けているに違いありません。この質問から学べることを願っています。PathImagePath

クラスの定義方法:

Public Class myClass
    'structured information which will be passed to a replicator

    Public Property ID As Integer
    Public Property ImagePath As System.IO.Path '<== this doesn't work
    Public Property ThumbPath As System.IO.Path '<== this doesn't work
    Public Property GroupID As Byte
    Public Property SystemID As Byte
    Public Property Comment As String
    'Other properties
End Class

このクラスの使用方法:

Public Function myReplicatorFunc(myObj as myClass)
    Dim myTempPath as string
    Dim myDBObj as myDBConnection

    'handle database connections

    myTempPath = myObj.ImagePath.GetDirectoryName() & "\" _
        myDBObj.GetIntID.toString() & "\" _
        myObj.ImagePath.GetExtension()

    My.Computer.FileSystem.RenameFile(myObj.ThumbPath.toString, myTempPath)

    'Other file movements for replication etc
End Function

プロパティを System.IO.Path クラスとして宣言できないのはなぜですか? 何らかの理由で答えが「いいえ」の場合 (理由を説明してください) System.IO.Path、同じメソッドの正確なコピーを持つカスタム クラスとして書き直さずに、メソッドをプロパティの拡張として使用するにはどうすればよいですか?

4

2 に答える 2

6

のインスタンスを宣言することはSystem.IO.Pathできません。これは静的クラスであるためです。インスタンス化することはできません。System.IO.Path名前空間の下のパス関連のグローバル関数の単なるグループ化と考えてください。(実際の名前空間は静的クラスであるSystem.IOためPath、機能的には、関連する一連のグローバル関数の単なる名前空間であるかのように動作します。)

プロパティImagePathが必要であり、そのロジックが必要なときstringに関数に渡すだけで済みます。Pathこれはちょっと残念です。

別の方法として、新しいクラスを作成することもできます (申し訳ありませんが、C# コードです。私は VB.NET の専門家ではありません)。

using System;
using System.IO;
// import namespaces as necessary

public class Filename
{
    private string m_sFilename;

    public Filename ( string sFilename )
    {
        m_sFilename = sFilename;
    }

    public string FullName
    {
        get
        {
            return ( m_sFilename );
        }
        set
        {
            m_sFilename = value;
        }
    }

    public string FolderName
    {
        get
        {
            return ( Path.GetDirectoryName ( m_sFilename ) );
        }
    }

    // Add more properties / methods
    ...
}

このクラスを作成したら、次のように記述できます。

private Filename m_oImagePath = null;

フォルダー/ファイル パスに特定のタイプを使用すると、パス名の操作に関連するロジックを簡単に更新できるため、プロジェクトでもほとんど同じことを行いました。

于 2013-06-07T05:02:18.020 に答える
1

次のように使用しない理由DirectoryInfo:

Public Property ImagePath As System.IO.DirectoryInfo
Public Property ThumbPath As System.IO.DirectoryInfo
于 2013-06-07T05:14:04.797 に答える