2016-11-21 22 views
0

私のコンソールプログラムでは、System.Net.Mail.MailMessageを使用して誰かに電子メールを送信したいと思います。しかし、私はそれを初期化することができない:(MailMessageで初期化するための設定が必要ですか?

名前空間:

using System.Net; 
using System.Net.Mail; 

をコード:

class emailHelper 
{ 
    string to = "[email protected]"; 
    string from = "[email protected]"; 
    MailMessage message = new MailMessage(from, to);// errors here 
} 

エラーメッセージが約ある:

フィールド初期化子が非を参照することはできません静的フィールド、メソッド、または プロパティ 'programA.emailHelper.from'

フィールド初期化子が非静的フィールド、メソッド、または プロパティを参照することはできません「programA.emailHelper.to」

私ははMailMessageを使用する前に設定するために何かを欠場か見当がつかない。

答えて

0

を情報。あなたはそれを動作させるにしたい場合は、あなたの文字列フィールドは静的にする必要がありますので

フィールド初期化子は非静的フィールド、メソッド、または 財産

を参照することはできません。私が疑うのは、あなたが望むものです。

class emailHelper 
{ 
    static string to = "[email protected]"; 
    static string from = "[email protected]"; 
    MailMessage message = new MailMessage(from, to);// errors here 
} 

私がこれは1つのヘルパーメソッドから静的なアドレスと静的なアドレスを持ちたいとは言いませんでした。あなたはヘルパーから出てきているとあなたが複数のMailMessageクラスを作成することができますアドレスを持っている。この場合

public class EmailHelper 
{ 
    public string To {get; set;} 
    public string From {get; set;} 
    public MailMessage message {get; set;} 

    public EmailHelper(string to, string from) 
    { 
     To = to; 
     From = from; 

     message = new MailMessage(from, to); 
    } 

} 

:あなたのコードは次のようになります。

0

エラーメッセージがフィールド初期化子を使用すると、別のフィールドを初期化するためにフィールドを使用傾ける意味非静的フィールド、メソッド、または 財産

を参照することはできません

を述べたように。しかし、あなたはここにコンストラクタを利用することができ、あなたのクラスの実装は次のようになります:

class emailHelper 
{ 
    string to = "[email protected]"; 
    string from = "[email protected]"; 
    MailMessage message; // Declare here 
    public emailHelper() // Constructor 
    { 
     message = new MailMessage(from, to);//initialize here 
    } 
} 

またはこのような読み取り専用のプロパティのゲッターを使用します。エラーメッセージはあなたにすべて与える

public MailMessage Message 
{ 
    get { return new MailMessage(from, to); } 
} 
0

フィールド初期化子は、非静的フィールドを参照することができない、方法、または プロパティ「フィールド」インスタンスフィールドは、メソッド外の他 インスタンスフィールドを初期化するために使用することができません。Compiler Error CS0236

// CS0236.cs 
public class MyClass 
{ 
    public int i = 5; 
    public int j = i; // CS0236 
    public int k;  // initialize in constructor 

    MyClass() 
    { 
     k = i; 
    } 

    public static void Main() 
    { 
    } 
} 
:あなたは法の外 変数を初期化しようとしている場合は、クラスのコンストラクタ

チェック内のドキュメントを初期化 の実行を検討

関連する問題