2011-07-03 25 views
1

コンストラクタ "Delay.vkMessages.vkMessages(string、System.DateTime、string、bool、string)"は自分自身を呼び出すことはできません。このクラスの別のクラスがありますが、コード)。このエラーを解決する方法は?コンストラクタは自分自身を呼び出すことはできませんC#

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using ImageCacher; 

    namespace Delay 
    { 
    public class vkMessages : INotifyPropertyChanged 
    { 
     public string Kto { get; private set; } 
     public DateTime Date_Time { get; private set; } 
     public string InOrOut { get; private set; } 
     public string TexT { get; private set; } 
     public bool Read_State { get; private set; } 
     public IEnumerable<vkMessages> Messages 
     { 
      get 
      { 
       if (null == _vk_messages) 
       { 
        _vk_messages = MessageService.GetMessages(InOrOut,() => MessagesLoaded = true); 
       } 
       return _vk_messages; 
      } 
     } 
     private IEnumerable<vkMessages> _vk_messages; 
     public bool MessagesLoaded 
     { 
      get { return _messagesLoaded; } 
      set 
      { 
       _messagesLoaded = value; 
       InvokePropertyChanged("MessagesLoaded"); 
      } 
     } 
     private bool _messagesLoaded; 

     public vkMessages(string kto, DateTime date_time, string text, bool read_state) 
     { 
      Kto = kto; 
      Date_Time = date_time; 
      TexT = text; 
      Read_State = read_state; 
     } 
     public vkMessages(string kto, DateTime date_time, 
      string text, bool read_state,string in_or_out) 

      : this(kto,date_time,text,read_state,in_or_out) 
     { 
      InOrOut = in_or_out; 

     }.... 
+0

間違ったコンストラクタを呼び出しています。最初のものを呼び出します。 ':this(kto、date_time、text、read_state)' – Jan

答えて

7

最後のパラメータを削除します。

public vkMessages(string kto, DateTime date_time, 
        string text, bool read_state,string in_or_out) 
    : this(kto, date_time, text, read_state) 
{ 
    InOrOut = in_or_out; 
} 

言った、あなたのロジックに偏りがある、それは他の方法でラウンドする必要があります(つまり、このコンストラクタは、すべての作業を行う必要がありますし、他のコンストラクタはこれを呼び出す必要があります1:

public vkMessages(string kto, DateTime date_time, string text, bool read_state) 
    : this(kto, date_time, text, read_state, false) { } 

public vkMessages(string kto, DateTime date_time, 
        string text, bool read_state,string in_or_out) 
{ 
    InOrOut = in_or_out; 
    Kto = kto; 
    Date_Time = date_time; 
    TexT = text; 
    Read_State = read_state; 
} 

最後に、あなたは.NETのガイドラインに準拠するように、あなたの識別子を修正する必要があり、特に、クラスが上位-CASから始まるのPascalCase規則に従ってください。 eレター。

+0

+1:私は現在、契約している間違い(double-initialisingなど)につながるクロスコールコンストラクタを追加したいと思います。私は個人的には、コードのいくつかの行を保存するためにC#の "機能"を酷使することを避けるでしょう。注意して使用してください。 –

関連する問題