2017-06-13 14 views
0

USBDriveSerialNumberクラスの公開メソッドgetSerialNumberFromDriveLetterを呼び出す際にこのエラーが発生します。別のクラスから関数を呼び出す際にエラーが発生しました:フィールド初期化子が非静的フィールド、メソッド、またはプロパティを参照できません。

エラー:フィールド初期化子は、非静的フィールド、メソッド、またはプロパティを参照できません。

私のコード

using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     USBDriveSerialNumber usb = new USBDriveSerialNumber(); 
     string serial = usb.getSerialNumberFromDriveLetter("f:\\"); 
     // Debug.WriteLine(serial); 
    } 

} 

//USBDriveSerialNumber Class 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Management; 

namespace WindowsFormsApplication2 
{ 
    class USBDriveSerialNumber 
    { 
     string _serialNumber; 
     string _driveLetter; 

     public string getSerialNumberFromDriveLetter(string driveLetter) 
     { 
      this._driveLetter = driveLetter.ToUpper(); 

      if (!this._driveLetter.Contains(":")) 
      { 
       this._driveLetter += ":"; 
      } 

      matchDriveLetterWithSerial(); 

      return this._serialNumber; 
     } 

     public void matchDriveLetterWithSerial() 
     { 

      string[] diskArray; 
      string driveNumber; 
      string driveLetter; 

      ManagementObjectSearcher searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition"); 
      foreach (ManagementObject dm in searcher1.Get()) 
      { 
       diskArray = null; 
       driveLetter = getValueInQuotes(dm["Dependent"].ToString()); 
       diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(','); 
       driveNumber = diskArray[0].Remove(0, 6).Trim(); 
       if (driveLetter == this._driveLetter) 
       { 
        /* This is where we get the drive serial */ 
        ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
        foreach (ManagementObject disk in disks.Get()) 
        { 

         if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB") 
         { 
          this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString()); 
         } 
        } 
       } 
      } 
     } 

     private string parseSerialFromDeviceID(string deviceId) 
     { 
      string[] splitDeviceId = deviceId.Split('\\'); 
      string[] serialArray; 
      string serial; 
      int arrayLen = splitDeviceId.Length - 1; 

      serialArray = splitDeviceId[arrayLen].Split('&'); 
      serial = serialArray[0]; 

      return serial; 
     } 

     private string getValueInQuotes(string inValue) 
     { 
      string parsedValue = ""; 

      int posFoundStart = 0; 
      int posFoundEnd = 0; 

      posFoundStart = inValue.IndexOf("\""); 
      posFoundEnd = inValue.IndexOf("\"", posFoundStart + 1); 

      parsedValue = inValue.Substring(posFoundStart + 1, (posFoundEnd - posFoundStart) - 1); 

      return parsedValue; 
     } 
    } 
} 

答えて

1

あなたは、コンパイラができるので、あなたは、別のインスタンス変数を初期化するために、インスタンス変数を使用することはできません

 public Form1() 
     { 
     InitializeComponent(); 
     USBDriveSerialNumber usb = new USBDriveSerialNumber(); 
     string serial = usb.getSerialNumberFromDriveLetter("f:\\"); 
     } 
+1

にありがとうをコンストラクタにシリアルを設定動かすUSBは静的にするために変更し、それを –

0

コンストラクタ内getSerialNumberFromDriveLetterメソッドを呼び出すか、新しいメソッドを作成する必要がありますそれらの変数を再配置する。

string serial = new USBDriveSerialNumber().getSerialNumberFromDriveLetter("f:\\"); 

または

static USBDriveSerialNumber usb = new USBDriveSerialNumber(); 
string serial = usb.getSerialNumberFromDriveLetter("f:\\"); 

か、今その作業罰金ソリューション、のために

string serial; 
public Form1() 
{ 
     InitializeComponent(); 
     serial = usb.getSerialNumberFromDriveLetter("f:\\"); 
} 
関連する問題