2013-05-31 130 views
3

這是我的課誰開始Wireshark過程並返回文件的詳細信息:返回我的對象​​是否正確?

public class Capinfos 
    { 
     private int _packets; 
     private string _duration; 

    private void getPackets(string file) 
    { 
     /// 
    } 

    private void getDuration(string file) 
    { 
     /// 
    } 

     public int packets 
     { 
      get { return _packets; } 
     } 

     public string duration 
     { 
      get { return _duration; } 
     } 

    public Capinfos getFileDetails(string file) 
     { 
      this.getNumberOfPackets(file); 
      this.getFileDuration(file); 
      return this; 
     } 
} 

主要

 Capinfos capinfos = new Capinfos(); 
     Capinfos cap = capinfos.getFileDetails(file); 

我的問題是關於getFileDetails功能,是它確定返回我的對象​​這樣?

+0

爲什麼不構建新對象或將方法名稱更改爲「PopulatePackets」,「PopulateDuration」等? –

+0

您可能想要使用* Constructor Injection *,因爲您實際上傳遞了一個參數,然後返回相同的參數並稍加修改。 – Greg

+0

我可以舉個例子嗎? – user2214609

回答

3

爲什麼引用的東西你已經離開。如前所述,您可以使用一個構造函數中,你需要 '建構' 類的信息傳遞:

public class Capinfos 
{ 
    private int _packets; 
    private string _duration; 

//constructor; 
    public Capinfos(string file) 
    { 
     this.getPackets(file); 
     this.getDuration(file); 

    } 
private int getPackets(string file) 
{ 
    /// 

} 

private string getDuration(string file) 
{ 
    /// 

} 

    public int packets 
    { 
     get { return _packets; } 
    } 

    public string duration 
    { 
     get { return _duration; } 
    } 

}

主營:

Capinfos capinfos = new Capinfos(file);

1

我實際上將該文件作爲構造函數。您沒有使用像StringBuilder這樣的構建器模式,所以它很奇怪返回相同的引用。

+0

你可以把代碼嗎? – AAlferez

+0

我發佈了所有相關的代碼 – user2214609

+0

我在告訴@Daniel .... – AAlferez

2

你也可以實現getFilesDetails方法,靜態工廠方法

public class Capinfos 
{ 
    private int _packets; 
    private string _duration; 

private void getPackets(string file) 
{ 
    /// 
} 

private void getDuration(string file) 
{ 
    /// 
} 

    public int packets 
    { 
     get { return _packets; } 
    } 

    public string duration 
    { 
     get { return _duration; } 
    } 

public static Capinfos GetFileDetails(string file) 
    { 
     var info = new Capinfos(file); //allowed, because it's the same class 
     info.getNumberOfPackets(file); 
     info.getFileDuration(file); 
     return info; 
    } 

}

使用

var cap = Capinfos.GetFileDetails(file); 
+0

什麼好處會給我靜態? – user2214609

+1

這只是一種利用'GetFileDetails'方法的方法,工廠模式主要用於如果您想將實例化的類的詳細信息保留到工廠方法的情況。假設你有GifFile&JpgFile都從Capinfos繼承。通過使用工廠方法,Capinfos類可以根據傳入的文件決定創建哪種類型,並且在任何情況下調用代碼都會獲得Capinfos對象。 – Jason

0

讓我提出一個)爲您的數據創建一個只讀struc,b)結合文件中的讀取功能

public struct CapInfo 
{ 
    public readonly int Packets; 
    public readonly string Duration; 

    CapInfo(int packets, string duration) 
    { 
     this.Packets=packets; 
     this.Duration=duration; 
    } 

    public static CapInfo ReadFileDetails(string file) 
    { 
     using(var fs=System.IO.File.Open(file, System.IO.FileMode.Open, System.IO.FileAccess.Read)) 
     {     
      int packets = // from the file 
      string duration = // from the file 

      return new CapInfo(packets, duration); 
     } 

    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var info=CapInfo.ReadFileDetails(file); 
    } 
} 
相關問題