2017-06-15 10 views
0

アプリケーションとログインの2つのクラスがあるコードを編集しています。C#:クラスメソッドが自分自身を返すようにする

public class Application: WebEntity 
{ 
    public void logInMethod() 
    { 
     LogIn logInObject = new LogIn(); 
     this = logInObject.logUserIn("user", "password"); 
    } 
} 

ログインはアプリケーションの機能であるため、LogInを使用するメソッドを作成します。 logIn.logUserIn( "user"、 "password")は現在Applicationのオブジェクトを返します。私はステップ6(上記)で行われたような何かをすることができるようにしたい。これは可能ですか?

+2

いいえ、 "this"ポインタを再割り当てすることはできません。 –

答えて

0

短い回答:いいえ、できません。

メソッドは、実行中のインスタンスを設定できません。それはあなたが何をしたいのかを理解するのは難しいが、あなたは何をしたいかもしれないもの、Applicationのインスタンスを返すメソッドを作成します

public class Application : WebEntity 
{ 
    public static Application CreateLogedInApplication() 
    { 
     LogIn logInObject = new LogIn(); 
     Application newApplication = logInObject.logUserIn("user", "password"); 

     return newApplication; 
    } 
} 
+0

ありがとうございます。私がする必要があると信じているのは、logUserInを再設計してApplicationのオブジェクトを返さないようにすることです。そして、logUserInメソッドで設定されたApplication変数をApplicationクラスに移動させるだけです。 私の質問では、これに簡単な方法があるかどうかを調べようとしていました – appyCrabby

+0

アプリケーションの構造をどのように構成するかについての情報はほとんどありませんが、[懸念の分離](https ://en.wikipedia.org/wiki/Separation_of_concerns)を参照してください。例えば、ログインする方法を知らないが、どのように( 'LogIn')が妥当なものであるかを知っているクラスのインスタンスを持つアプリケーションを持つ。 – Tipx

0

あなたはこのような何か必要なようですね:

public class Application 
{ 
    private Token _token = null; 

    public void logInMethod() 
    { 
     LogIn logInObject = new LogIn(); 
     _token = logInObject.logUserIn("user", "password"); 
    } 
} 

public abstract class Token 
{ 
    public abstract string UserName { get; } 
    public abstract bool Validated { get; } 
} 

public class LogIn 
{ 
    private class TokenImpl : Token 
    { 
     public TokenImpl(string userName, bool validated) 
     { 
      _userName = userName; 
      _validated = validated; 
     } 
     private string _userName; 
     private bool _validated; 
     public override string UserName { get { return _userName; } } 
     public override bool Validated { get { return _validated; } } 
    } 

    public Token logUserIn(string userName, string password) 
    { 
     return new TokenImpl(userName, password == "pAssw0rd"); 
    } 
} 

LogInクラスは、Applicationクラスが使用できるTokenを作成します。

関連する問題