2016-02-12 38 views
1

我一直在尋找一個答案,但沒有找到一個匹配我的問題和/或無法理解那些不符合我的例子。 這裏是我的問題的一個例子:如何通過外部類的方法之間傳遞值

在Form.cs,

namespace Test 
public partial class Form 
`{ 
    public void firstmethod() 
    { 
    enregistre enr = new enregistre(); 
    enr.date = dateTimePicker1.Value.ToShortDateString(); 
    } 

    public void secondmethod() 
    { 
    enregistre enr = new enregistre(); 
    textBox1.Text = enr.date; 
    } 

在我的Program.cs 我:

namespace Test 
public class enregistre 
{ 
public DateTime date { get; set; } 
} 

我的問題是:同樣的方法內我可以根據需要隨時調用enr.date並保持設置或返回的值,但是當我從下一個方法調用它時,它將返回「01/01/0001」...如何在存儲方法時保存值在另一個班上? 我知道我可以只使用「public partial class {」,但我現在使用這個其他類寫了超過1000行的「public DateTime date」..有什麼方法可以解決這個問題,而無需重寫所有內容? 如果可以使用此示例代碼編寫解決方案,這將非常有用。 謝謝。

+0

在班級中設置一個私人成員 - 將其設置爲時間,然後將該私人成員設置爲您要使用它的位置。 當你創建一個新的對象時,它有一個新的引用,並且由於你沒有設置它,所以它回調到默認的01/01/0001 – juanvan

回答

1

聲明它是靜態的,以便它在實例之間保留它的值。

namespace Test 
public static class enregistre 
{ 
    publist static DateTime date {get;set;} 
} 

現在,當你調用它,你使用 enregistre.date = DateTimePicker1.Value.ToShortDateString();

當您使用實例變量(無靜態描述符)時,將爲每個實例重新初始化變量,這意味着每次調用new <classname>。如果要在調用之間保持值,請使用static。

+0

這就是它!非常感謝您快速準確的回覆! – Robert

1

您的第一個方法和第二個方法使用同一個類的不同實例。爲了能夠在他們之間共享信息,您應該使用相同的實例。

public partial class Form 
{ 
    public enregistre Enr {get; private set;} 

    public void firstmethod() 
    { 
     Enr = new enregistre(); 
     Enr.date = dateTimePicker1.Value.ToShortDateString(); 
    } 

    public void secondmethod() 
    { 
     textBox1.Text = Enr .date; 
    } 
    } 
+0

不幸的是我在第二個方法的enr.date上得到了一個「NullReferenceException」如果我重新聲明一個新的enregistre實例,值爲01/01/0001 – Robert

+0

這是因爲Enr屬性是在第一種方法中實例化的,只有在調用第一種方法後,才能從第二種方法訪問它。 –

+0

啊對啊:)非常感謝。 – Robert

0

當您從第二個方法調用它,你得到一個不同的值回來,因爲你是一個不同的enregistre調用對象的date。如果將date屬性更改爲靜態,那麼將只有一個date,它適用於整個enregistre類,而不適用於該類的每個實例。另一種解決方案是在Test.Form中的兩個方法的調用者中創建enregistre,然後將它作爲參數傳遞給每個方法。

+1

是的,謝謝你,你是對的我不知道如何「靜態」工作。 – Robert

0

難道你們就不能修改enregistre類,如下所示保存日期值:一個類中

public class enregistre { 
    private static Nullable<DateTime> _date; 

    public DateTime date { 
     get { 
      return _date.HasValue() ? _date.Value : default(_date); 
     } 
     set { 
      _date = value; 
     } 
    } 
} 

因爲在你的方法,你正在創建enregistre(的新實例),方法之間,它會除非您按照您的指示對代碼進行了一些更改,否則難以保留財產價值。