C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: クラス分け


(過去ログ 63 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■36283 / inTopicNo.1)  クラス分け
  
□投稿者/ クラス初心者 (3回)-(2009/05/26(Tue) 19:59:29)

分類:[C#] 

前回はいろいろご教示いただきありがとうございました。
引き続き、クラス分けで質問があります。
Formの一部(IDの設定)をクラスに分けるときに、次のようにしてみました。
ところが、IDは空になっていて、Class1での設定が反映されません。
IDに値をセットするには、どのようにしたらよいですか?

Form1.cs
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string ID;
        public Form1()
        {
            InitializeComponent();

            WindowsFormsApplication1.Class1 id = new WindowsFormsApplication1.Class1();
            id.setID(ID);
            MessageBox.Show(ID);
        }
    }
}

Class1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    class Class1
    {
        public string setID(string ID)
        {
            ID = "abcd0123";
            return ID;
        }

    }
}

引用返信 編集キー/
■36284 / inTopicNo.2)  Re[1]: クラス分け
□投稿者/ Hongliang (390回)-(2009/05/26(Tue) 20:51:17)
なんか方向が逆ですね。
obj.SetParam(param);
という場合、obj インスタンスの内部の値に param を設定する、という意味になるのが一般的です。
obj から値をもらうなら、GetParam という命名にすべきです。そして、その場合は返値として値を返しますのが一般的です。
retval = obj.GetParam();

// そのコードだけだと「プロパティにすれば?」「Class1 ってインスタンス化する意味ある?」「Class1 って名前じゃどうにもならなくない?」「わざわざ分ける必要ある?」その他諸々疑問点が出てきますが。
引用返信 編集キー/
■36299 / inTopicNo.3)  Re[2]: クラス分け
□投稿者/ クラス初心者 (4回)-(2009/05/26(Tue) 23:26:06)
ありがとうございます。できました。
あ。おっしゃるとおりsetは間違いですね。
getとすべきでした。

これは質問用に作ったコードなので、書き写しているときに間違えたみたいです。
失礼しました。

これ、IDとパスワードのように、値が複数の場合は、どのようにしたらよいでしょう?

Form1.cs
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string ID;
string PASSWORD;
public Form1()
{
InitializeComponent();

WindowsFormsApplication1.Class1 id = new WindowsFormsApplication1.Class1();
(ID, PASSWORD) = id.getID(ID, PASSWORD);
MessageBox.Show(ID);
Close();
}
}
}

Class1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
class Class1
{
public string getID(string ID, string PASSWORD)
{
ID = "abcd0123";
PASSWORD = "password0123";
return ID;
return PASSWORD;
}

}
}

としたところ、

構文エラーです。'=>' が必要です。
ローカルの変数 'ID' をこのスコープで宣言することはできません。
これは、'親またはカレント' スコープで別の意味を持つ 'ID' の意味が変更されるのを避けるためです。
;が必要です。
というエラーが出ています。

引用返信 編集キー/
■36301 / inTopicNo.4)  Re[3]: クラス分け
□投稿者/ Hongliang (394回)-(2009/05/26(Tue) 23:34:56)
二回に分けて取得すればいいんじゃないですか?
あとは ID と Password プロパティを持つ UserToken クラスでも作ってそれをやりとりするか。あれ、それって Class1(仮名)クラスそのもの?
引用返信 編集キー/
■36303 / inTopicNo.5)  Re[4]: クラス分け
□投稿者/ クラス初心者 (5回)-(2009/05/27(Wed) 00:03:05)
2回にわける?

ID = id.getID(ID, PASSWORD);
PASSWORD = id.getID(ID, PASSWORD);
MessageBox.Show(ID);
MessageBox.Show(PASSWORD);

としてみたところ、おなじ値が…。
初歩的な質問ですみません。

おっしゃるように、Class1(仮名)は、IDやらなんやかやを一括管理するためのクラスです。

引用返信 編集キー/
■36304 / inTopicNo.6)  Re[5]: クラス分け
□投稿者/ Hongliang (395回)-(2009/05/27(Wed) 00:12:37)
ID = id.getID();
PASSWORD = id.getPassword();
こうですよ。
// やはりプロパティにすべきものに見える。
引用返信 編集キー/
■36310 / inTopicNo.7)  Re[6]: クラス分け
□投稿者/ クラス初心者 (6回)-(2009/05/27(Wed) 01:59:55)
はまってます。

Form1.cs
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string ID;
        string PASSWORD;
        public Form1()
        {
            InitializeComponent();

            WindowsFormsApplication1.Class1 id = new WindowsFormsApplication1.Class1();
            ID = id.getID();
            PASSWORD = id.getID();
            MessageBox.Show(ID);
        }
    }
}

Class1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    class Class1
    {
        //public string getID(string ID, string PASSWORD)
        public string getID()
        {
            ID = "abcd0123";
            PASSWORD = "password0123";
            return ID;
            return PASSWORD;
        }

    }
}

名前 'ID' は現在のコンテキスト内に存在しません。
名前 'PASSWORD' は現在のコンテキスト内に存在しません。

ちなみに、じっさいのClass1(仮名)では、プロパティを使っています。
直接Form1でプロパティを読んでいたのです。
プロパティの設定項目が思ったよりも増え、
かつ他のプログラムでも、同様の設定をしたいことから、
クラス化しようと考えて、いま悪戦苦闘中です。

引用返信 編集キー/
■36311 / inTopicNo.8)  Re[7]: クラス分け
□投稿者/ もりお (1回)-(2009/05/27(Wed) 04:56:11)
No36310 (クラス初心者 さん) に返信
関数とか引数とかプロパティとか調べると
理解できるのではないかと思います。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        WindowsFormsApplication1.Class1 id = new WindowsFormsApplication1.Class1();
        MessageBox.Show(id.getID());
        MessageBox.Show(id.getPassword());
    }
}

class Class1
{
    public string getID()
    {
        return "abcd0123";
    }
    
    public string getPassword()
    {
    	return "password0123";
    }
}


引用返信 編集キー/
■36312 / inTopicNo.9)  Re[1]: クラス分け
□投稿者/ Jitta on the way (323回)-(2009/05/27(Wed) 07:09:18)
No36283 (クラス初心者 さん) に返信
> 前回はいろいろご教示いただきありがとうございました。
> 引き続き、クラス分けで質問があります。
> Formの一部(IDの設定)をクラスに分けるときに、次のようにしてみました。
> ところが、IDは空になっていて、Class1での設定が反映されません。
> IDに値をセットするには、どのようにしたらよいですか?
>
> Form1.cs
> using System;
> using System.Drawing;
> using System.Text;
> using System.Windows.Forms;
>
> namespace WindowsFormsApplication1
> {
> public partial class Form1 : Form
> {
> string ID;
> public Form1()
> {
> InitializeComponent();
>
> WindowsFormsApplication1.Class1 id = new WindowsFormsApplication1.Class1();
> id.setID(ID);
> MessageBox.Show(ID);
> }
> }
> }
>
> Class1.cs
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
>
> namespace WindowsFormsApplication1
> {
> class Class1
> {
> public string setID(string ID)
> {
> ID = "abcd0123";
> return ID;
> }
>
> }
> }
>

string って、参照型としては特殊なので、ref(out)付けなきゃならん、ってことかな?

とりあえず、C#言語仕様や、MSDNを読む癖をつけることを勧めます。
クラスの切り分けは、勘や経験、センスが要求されます。それらをウェブで伝えることは、まずできません。それよりなにより、知っている部品をデタラメに組み合わせるようでは、時間がかかってしかたありません。もうちょっと、上手に時間を使いましょう。
引用返信 編集キー/
■36348 / inTopicNo.10)  Re[8]: クラス分け
□投稿者/ クラス初心者 (7回)-(2009/05/27(Wed) 19:13:06)
No36311 (もりお さん) に返信
ぎょぎょぎょ。メソッドも分けるんですね。
ところで、エラーメッセージを見ると、
=>という書き方があるらしいのですが、
それをご教示いただけないでしょうか。
引用返信 編集キー/
■36351 / inTopicNo.11)  Re[2]: クラス分け
□投稿者/ Hongliang (396回)-(2009/05/27(Wed) 19:28:12)
> ところで、エラーメッセージを見ると、
> =>という書き方があるらしいのですが、
> それをご教示いただけないでしょうか。

=> はラムダ式という匿名のメソッドを定義するための構文に使われますが、
今回のご質問には関係ないところです。

ちなみにラムダ式はソートとかに便利です。ID 順に並べるとか。
List<Class1> list = new List<Class1>();
// (listにいくつかインスタンスを追加)
list.Sort((a, b) => a.ID - b.ID);
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -