0

get & set Methode のない CButtonCreate クラスがあります。しかし、クラス WriteToFile である他のクラスで、クラス CButtonCreate の属性「string newFileName」を使用したいと考えています。クラス WriteToFile で属性 newFileName を使用するにはどうすればよいですか?

class CButtonCreate
{
    // Create a Folder && SubFolder from the tbProject
    public void CreateFolder(string MyFolderName, string Mytbs, string MytbRevision, string MyTestSystem)
    {
        // Open the Directory path
        string activeDir = @"Y:\temp";

        //Combine the current active folder with the tbProject
        string newPath = Path.Combine(activeDir, MyFolderName);

        // Create a folder in the active Directory
        Directory.CreateDirectory(newPath);

        // Create a new SubFolder name. This example generates a random string. "tbs"
        string newSubPath = Path.Combine(newPath, Mytbs);

        //Create a new Subfolder under the current active folder
        Directory.CreateDirectory(newSubPath);

        // Create a new file name.
        string newFileName = "Project_" + MyFolderName + "_" + MytbR + ".txt";

        // Combine the new file name with the path
        newPath = System.IO.Path.Combine(newPath, newFileName);

        if (!System.IO.File.Exists(newPath))
        {
            using (System.IO.FileStream fs = System.IO.File.Create(newPath))
            {
               // Call the Function WriteInFile
            }
        }
    }

class WriteToFile
{
    public void WriteInFile(string MyFolderName, string MytextBox, string MytbR, string MycbTest)
    {
        CButtonCreate myFile = new CButtonCreate();
        StreamWriter sw = new StreamWriter(newFileName);
    }
}
4

1 に答える 1

0

WriteInFile メソッドは、次のようにnewFileName値をメソッドの引数として受け取る必要があります。

class WriteToFile
{
    public void WriteInFile(string newFileName, string MyFolderName, string MytextBox, string MytbR, string MycbTest)
    {
        CButtonCreate myFile = new CButtonCreate();
        StreamWriter sw = new StreamWriter(newFileName);
    }
}

次に、次のCButtonCreate.CreateFolderように呼び出します。

WriteToFile w = new WriteToFile();
w.WriteInFile(newFileName, ...);

または、必要に応じて、値を次のように WriteToFile コンストラクターのパラメーターに渡すこともできます。

class WriteToFile
{
    public WriteToFile(string newFileName)
    {
        _newFileName = newFileName;
    }

    private string _newFileName;

    public void WriteInFile(string MyFolderName, string MytextBox, string MytbR, string MycbTest)
    {
        CButtonCreate myFile = new CButtonCreate();
        StreamWriter sw = new StreamWriter(_newFileName);
    }
}

そして、CButtonCreate.CreateFolderあなたからは次のように呼び出します:

WriteToFile w = new WriteToFile(newFileName);
w.WriteInFile(...);

CButtonCreateプロパティを使用したり、オブジェクトをオブジェクトに渡したり、静的プロパティを使用したりする方法は他にもありますが、WriteToFile例として示したこれら 2 つのオプションが最も可能性が高く、最良の解決策のようです。

また、「属性」という用語を誤用していることにも言及する必要があります。.NET 言語では、属性は非常に特殊なものであり、あなたが話しているものとはまったく異なります。属性は、コードを説明するメタデータでコードを「装飾」する方法を提供します。たとえば、デバッグ中にメソッドをトレースするか、単にスキップするかをデバッガに指示する属性がいくつかあります。アセンブリを適切にビルドする方法をコンパイラに指示する属性は他にもあります。属性は、たとえば、アセンブリのバージョン番号を指定するために使用されます。

あなたが使用するつもりだった用語は、「プロパティ」または「フィールド」のいずれかだったと思います。newFileNameただし、変数は現在メソッドのローカル変数であるため、これらの用語はどちらも正しくありませんCreateFolder。したがって、スコープがそのメソッドであるため、別のクラスから、または同じクラス内の別のメソッドからでも、外部からアクセスする方法はありませんCreateFolder。そのメソッドが実行されている間だけ存在します。そのメソッドが終了するとすぐに、その文字列はなくなります。なんらかの理由で、クラス全体がアクセスできるようにしたい場合は、それをクラス レベルに移動して、クラスのフィールドにする必要があります。

class CButtonCreate
{
    private string newFileName;

    public void CreateFolder(string MyFolderName, string Mytbs, string MytbRevision, string MyTestSystem)
    {
        ...
    }
}

次に、他のクラスからアクセスできるようにしたい場合は、パブリックの get/set プロパティを作成できます。

于 2012-06-18T12:12:24.483 に答える