トップページ⇒tech
1001コメント320KB

ふらっとC#,C♯,C#(初心者用) Part31

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/09/29(月) 12:39:47
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part30
http://pc11.2ch.net/test/read.cgi/tech/1219220127/
0002デフォルトの名無しさん2008/09/29(月) 12:40:21
C#, C♯, C#相談室 Part48
http://pc11.2ch.net/test/read.cgi/tech/1219481054/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/

Live2
http://pc11.2ch.net/test/read.cgi/tech/1203674757/

初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
0003デフォルトの名無しさん2008/09/29(月) 12:40:49
参考サイト。まずはここで検索してから。
http://www.google.co.jp/
http://homepage3.nifty.com/midori_no_bike/CS/
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
http://dobon.net/vb/dotnet/
http://jeanne.wankuma.com/tips/
http://www.labasp.net/CsharpNote/
0004デフォルトの名無しさん2008/09/29(月) 13:20:37
(前スレ続き)
ってゲームのセーブデータみたいな移動・コピー不可属性のことか?
あれは自分で好きにプログラム組めないからできる話。
0005デフォルトの名無しさん2008/09/29(月) 13:24:49
スレタイの「ふらっと」ってどういう意味なんでしょう(?_?)
0006デフォルトの名無しさん2008/09/29(月) 13:30:13
>>998
そこまで規制する必要ってのも無いとは思うけどなぁ。
機密文章の持ち出しを禁止するため?

簡単に破られても良いなら、ファイルパスがキーになってファイルの暗号化を解くとかその程度で良いんじゃないかな?

それにしても、NTFSにダビング10とかコピーワンスとかあったらいやだなぁ
保護されたファイルを開くと OSがそのプログラムを監視して そのファイルに類似したデータを作成させないようにしたりして
すごく息苦しくていやになるなぁ。

0007デフォルトの名無しさん2008/09/29(月) 13:31:59
あ
0008前スレ9932008/09/29(月) 13:40:28
>>4>>6

そうです、フォルダ自身やファイル自身に属性があれば制限が可能になる
のだとは思うのですが、少なくともWindows系ではそういう制限はやはり
存在しない、ということですよね?

あればそれをそのフォルダやファイルの作成者が設定可能になっていれば
できると思うのですが、今後そういうものは追加される可能性はないでしょうか?

0009デフォルトの名無しさん2008/09/29(月) 13:48:44
いやだから、読めることができるデータがあって、どこかに書き込みできる権限があれば、
コピー不可だろうがいくつでもコピーできちゃうでしょ、ここはプログラム板だよ?
ファイラーが提供されたものしかない世界じゃないと無理。
0010デフォルトの名無しさん2008/09/29(月) 13:52:36
> あればそれをそのフォルダやファイルの作成者が設定可能になっていれば
> できると思うのですが、今後そういうものは追加される可能性はないでしょうか?
誰かエスパーのひと解読頼む
0011デフォルトの名無しさん2008/09/29(月) 13:58:54
>>9
>どこかに書き込みできる権限があれば、コピー不可だろうが
>いくつでもコピーできちゃうでしょ

だから、そのデータ(=フォルダ、ファイル)に色がついていて、
色がナンであるかで、書き込みを制限する属性があれば、という
ことですよ。

>>10
その属性を、それらデータ(=フォルダ、ファイル)の作成者が、
OSのサービス機能(プロパティ->セキュリティタブ、など)を使って
設定すればそれが有効になる、というような仕組みということです。
0012デフォルトの名無しさん2008/09/29(月) 14:00:56
>>11
その属性を律儀に守らないと無理だろ。
プログラム書いたことあるのか?
0013デフォルトの名無しさん2008/09/29(月) 14:02:33
>>11 続き

だから、例えば、「複製作成」の許可と言った感じで、「削除」の許可
の次あたりに追加してあれば、それをチェックすることで、そのフォルダや
ファイルに色がつくわけで、

そのデータを「書き込み」する時点で、それを操作を制限する、という
仕組みということです。これが可能になれば、複製してほしくないフォルダや
ファイルというものを作ることが可能になるわけです。
0014デフォルトの名無しさん2008/09/29(月) 14:04:20
>>12

まあ、ですから、「書き込み」という操作にも影響が及ぶような
仕組みでないといけないわけではありますですが・・・。
0015デフォルトの名無しさん2008/09/29(月) 14:04:56
>>10
>>8 ooOO(ファッキュー)
ttp://www.nicovideo.jp/watch/sm2364432
0016デフォルトの名無しさん2008/09/29(月) 14:05:58
いや、だからさ。
Explorerでのコピー操作ならそれでいいかもしれないよ?

でもさ、プログラム上、ファイルデータは単なるバイト配列として扱われるわけ。
で、単なるバイト配列を適当に作ったファイルに書き込むのを制限しようがないよね?
0017デフォルトの名無しさん2008/09/29(月) 14:13:38
>>16

確かに、どこまでのレベルで制限するのか、という問題はありますね。

ただ、ファイルシステム上の操作と言われる操作機能では制限される、
ということにしておけば、いわゆる 「ファイラ・ソフト」 レベルでは簡単
にはコピーされないで済む、という感じにではできないでしょうか。

ファイラを、そうやって原初レベルのI/Oの操作から作成されてしまえば
確かにできてはしまうのでしょうが・・・。

0018デフォルトの名無しさん2008/09/29(月) 14:17:29
その属性のファイルを読み込んだプログラムはファイルの作成
や書き込みが失敗するように
またほかのプログラムとの通信までできないようにOS側で徹底
的に管理するのか
そこまでやったとしても抜け道は存在するような気がするが
0019デフォルトの名無しさん2008/09/29(月) 14:18:08
>>17 続き

少なくとも、Win32APIや.NETFramework上のファイルシステム関係のメソッド
からは制限できる、といった感じで。それをやっても、制限としては価値は
ないでしょうか。

0020デフォルトの名無しさん2008/09/29(月) 14:22:19
>>18

フォルダやファイルのデータの中身そのもの仕掛けを作り、
それを所定のAPIやメソッドのコピー操作で書き込むときに
引っ掛ける、という感じまででいいかとは思っています。

0021デフォルトの名無しさん2008/09/29(月) 14:28:25
一切ないね
バックアップソフト作る会社が迷惑蒙るだけだろ
0022デフォルトの名無しさん2008/09/29(月) 14:37:06
なんにせよC#でやるべきじゃないのは確か
0023デフォルトの名無しさん2008/09/29(月) 14:50:53
>>21-22

わかりました。アドバイスくださり、
ありがとうございました。
0024デフォルトの名無しさん2008/09/29(月) 15:15:28
新しいFSを開発するスレはここですか?
0025デフォルトの名無しさん2008/09/29(月) 15:16:59
いや、つまんないから。
0026デフォルトの名無しさん2008/09/29(月) 15:29:33
>>993
拡張子を.scrにしたらコピーできなくなるよ
0027デフォルトの名無しさん2008/09/29(月) 18:14:40
web上からデータを取得するために以下の命令文を記述しました

HttpWebResponse res = (HttpWebResponse)req.GetResponse();

さらに、webのURLが間違えていたり、たまたまサーバーがダウンしているときに
備え、try〜catchの例外処理を施そう試み

try
{
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
}
catch(Exception e)
{
    ・・・・・
}

Stream st = res.GetResponseStream();
StreamReader sr = new StreamReader(st, enc);

と記述し直しました。

ところがこの状態でコンパイルを試みると、Stream st = res.GetResponseStream();で
「エラー 1 名前 'res' は現在のコンテキスト内に存在しません。」
というエラーが帰ってきました。try〜catchの例外処理に何か間違いでもあったのでしょうか?
0028デフォルトの名無しさん2008/09/29(月) 18:21:20
変数のスコープを考えろ。

それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
0029デフォルトの名無しさん2008/09/29(月) 18:21:28
そりゃスコープから外れたから。
HttpWebResponse res;
ここだけ外に出してごらん。
0030272008/09/29(月) 18:28:53
try文の中身を

HttpWebResponse res;
try
{
   res = (HttpWebResponse)req.GetResponse();
}

と変更してみましたが、今度は同じく Stream st = res.GetResponseStream();の部分で

「エラー 1 未割り当てのローカル変数 'res' が使用されました。」

という違うエラーが帰ってくるようになりましたorz・・・

その後ものは試しとtry文の前の命令を

HttpWebResponse res = null;

と書き直してみたところエラーも発生することなくコンパイルが通りました。
これでよかったのでしょうか?
0031272008/09/29(月) 18:29:37
>>28
> それから、直接は関係ないがcatch(Exception)はやめたほうがいい。

そうするよう参考書に書かれていたんですが(´・ω・`)・・・
0032デフォルトの名無しさん2008/09/29(月) 18:36:38
初心者向けの本なんだろうからしょうがない
本当はMSDNに書いてある形でキャッチするようにしないと
0033デフォルトの名無しさん2008/09/29(月) 18:40:03
tryで例外出してcatch後にもresを使ってるだろ。
それで未初期化のresを使う可能性があるという警告だよ。
tryブロックに入れるか、catchしたらres使う行に行かないようにしなくちゃ。
0034272008/09/29(月) 19:04:09
>>32
> 初心者向けの本なんだろうからしょうがない
> 本当はMSDNに書いてある形でキャッチするようにしないと

(WebException e)で受け取り、e.Messageあたりでエラーを表示するようにすればいいでしょうか?

>>33
なるほどresは全てtry文の中に収めたほうが堅牢性が増しましたか。
0035デフォルトの名無しさん2008/09/29(月) 19:17:35
引数に渡されたStreamのデータのフォーマットが正しくないときにはどの例外を投げたらいい?
自作?
0036デフォルトの名無しさん2008/09/29(月) 19:23:25
自作しても良いがArgumentExceptionでいいんじゃね
0037272008/09/29(月) 19:24:30
>>35
自作です。

よく考えたらStreamで受け取ったデータを見て、フォーマットが正しいか否かで
正しくデータを受信できたかどうか判定するのがいいかもしれません。

GetResponse();

の例外ってあまり使う機会は無いかも知れませんね。
0038デフォルトの名無しさん2008/09/29(月) 19:30:32
> GetResponse();
> の例外ってあまり使う機会は無いかも知れませんね。

や、普通は503返されたりとかしたときの対応が必要だと思うが
0039デフォルトの名無しさん2008/09/29(月) 20:17:36
問題は例外キャッチしたあとどうしようとしてるかだ
0040デフォルトの名無しさん2008/09/29(月) 21:08:34
質問です。

生徒、Aさん Bさん Cさん.... がいます。
それぞれの人に、国語や数学のテストの成績があったとして、

(名前,科目,点数)

というようなデータを、それぞれの人がもつ変数に入れていくプログラムを作りたいと考えています。
ここで、(名前,科目,点数)のデータはイベントでランダムに送られてきます。

Aさん、Bさん、... は、生徒クラスを作成し、1人1インスタンスでnewしたとして、

問題1)Aさん、Bさん、... 別のインスタンスを作成する方法がわからない(それぞれにユニークなインスタンス名を与える方法?)

問題2)問題1が解決したとして、ランダムに送られてきたデータを、それぞれのクラスに振り分ける方法がわからない。

というよりも、なんかもっとスマートな解決策があると思うのですが、、、
0041デフォルトの名無しさん2008/09/29(月) 21:10:43
なんかスマートじゃない方法なら、コードが書けるような口ぶりだな。
0042デフォルトの名無しさん2008/09/29(月) 21:11:36
普通は生徒クラスに名前プロパティ用意するんじゃね?
つかクラスに振り分けるって何よ
0043デフォルトの名無しさん2008/09/29(月) 21:20:16
>>40
「インスタンス名」とは変数名のことだと思うが、そんなものはユニークである必要どころか
名前をつける必要すらない。(データベースのレコードに名前なんて必要ないように)

単純化していえばデータ構造は「生徒クラス」のリストでよく、
要は名前なら名前からそれに一致する「生徒クラス」のインスタンスを
検索できる機能を考えればそれで済む。

それができれば問題2も自動的に解決するでしょ。
0044デフォルトの名無しさん2008/09/29(月) 21:20:40
>>40
class クラス:List<生徒> // 生徒Collectionでもおk
{ String 名前; int Get平均点(科目名 科目);}みたいなクラスにAddしていけばいいんじゃない?
0045デフォルトの名無しさん2008/09/29(月) 21:20:51
Dictionary<string, Student> dic = new Dictionary<string, Student>();


Data[] data = GetData();

foreach(Data d in data)
{
if(dic.ContainsKey(d.Name) == false)
{
dic.Add(d.Name, new Student(d.Name, d.Subject, d.Point));
}
else
{
dic[d.Name].AddResult(d.Subject, d.Point);
}
}

こんなんかね
0046デフォルトの名無しさん2008/09/29(月) 21:29:46
テキストエディタ作ってみました
TeraPad風ですが、プラグインの追加機能などあります
http://www.dotup.org/uploda/www.dotup.org7215.zip.html
0047デフォルトの名無しさん2008/09/29(月) 21:32:37
素早い返信ありがとうございます。

>>41さん
すいませんでした。

>>42さん
プロパティに名前を入れておき、送られたデータに対して名前が一致するかしらべるメソッドを用意して、一致すれば科目データを入れるというやり方の場合、
すべてのインスタンスにデータを送る方法がわかりません。そして、そういう処理は効率が悪いと思います。
変な説明で申し訳ないです。

>>43さん
「生徒クラス」のリスト、という意味が分かりません。クラスのリスト?クラスをリストにする?っていう意味が・・・
リストの項目にクラスのアドレスを入れておいて呼び出す?

0048デフォルトの名無しさん2008/09/29(月) 21:44:11
>>45
そのStudentのコンストラクタ引数は不自然とおもふw
0049デフォルトの名無しさん2008/09/29(月) 21:48:42
dic.Add(d.Name, new Student(d.Name, new[] { new SubjectScore(d.Subject, d.Point) });
こんな感じか
0050402008/09/29(月) 21:51:08
具体的な例文まで示していただいて頭が上がりません。

>>44さん

class クラス:List<生徒>

の意味が分かりません。すいません勉強不足です。
Listを継承してるというのは分かるんですが、<生徒>という部分がどういう意味なのか、、、

>>45さん

Dictionaryの次の< > でくくった部分の意味が44さんと同じくどういう意味を示すのか分かりません。

Data[] data = GetData(); の意味が分かりません。要素数を指定しない場合の配列は後で要素数をしていしないといけないのでは?
0051デフォルトの名無しさん2008/09/29(月) 21:51:59
オウム返しに聞くな
馬鹿丸出しじゃないか
0052デフォルトの名無しさん2008/09/29(月) 21:59:33
ちなみにList<T>を継承するのは非推奨だからね
0053デフォルトの名無しさん2008/09/29(月) 21:59:35
>>51
まあしかし、そういうスレでしょ。

>>47
リストが分からないならとりあえず配列だと思えばいいよ。
「生徒クラス」の(インスタンスの)配列。

その配列の中から、名前なら名前を使って目的の「生徒クラス」のインスタンスを
検索する方法を考えればいい。

他の人が書いているようにList<T>とかDictionary<T>を使った方が簡単なんだけど、
いきなりそれらのクラスを理解しろって言っても無理っぽいからまずは配列で
やってみたら?
0054デフォルトの名無しさん2008/09/29(月) 22:00:47
点プレにこのあたりのリンクも必要なんじゃね?
http://ufcpp.net/study/csharp/
http://msdn.microsoft.com/ja-jp/library/618ayhy6.aspx
http://msdn.microsoft.com/ja-jp/library/67ef8sbd.aspx
0055デフォルトの名無しさん2008/09/29(月) 22:01:08
ごめんDictionary<T>ってそんなのないなw
0056デフォルトの名無しさん2008/09/29(月) 22:03:48
>>50
Dictionary
http://msdn.microsoft.com/ja-jp/library/xfhwa508.aspx
まあこれを読め

配列は

int[] array = GetArray();

...

int[] GetArray()
{
return new int[]{ 1, 3, 5 };
}

こんなことも出来るんだ
0057デフォルトの名無しさん2008/09/29(月) 22:09:58
名前だけをキーにしてdicに入れたら、複数の教科に対応できないじゃん。
いいの?
0058デフォルトの名無しさん2008/09/29(月) 22:14:30
>>57
複数の強化に対応できない、ってのは意味不明だけど、
>>40の話はとりあえず名前のみで検索できれば必要十分に聞こえるけど。
0059402008/09/29(月) 22:16:46
みなさん本当にありがとうございます。

馬鹿丸出しで申し訳ないですが、みなさんのアドバイスが充分に理解できませんでした。
コメントや参照サイト先をじっくりと読んでみます。

解決の方法は示して頂きましたので、あとは自分で理解してみます。

こんな初心者の為に貴重な時間を裂いていただき本当にありがとうございました。
では
0060デフォルトの名無しさん2008/09/29(月) 22:27:50
>>57
それぞれの生徒が教科と点数のセットのコレクションを持てばいい
0061デフォルトの名無しさん2008/09/29(月) 23:38:39
>>58
Aさんの国語の成績、数学の成績ってデータが入ってきたら、「A」だけのキーでdicに
入れてたら、片方の成績しか入らないじゃん。
0062デフォルトの名無しさん2008/09/29(月) 23:42:01
RDB意識すると、こんな感じかね

      *   1         1   *
Student ------ ExamResult ------ Exam
生徒        試験結果       試験

class Student {
  public string Name;
  // その他、付加情報 (e.g. 学籍番号, etc.)
  public List<ExamResult> ExamResults;
}

class Exam {
  public string Name;
  // その他、付加情報 (e.g. 実施日時, etc.)
  public List<ExamResult> Results;
}

class ExamResult {
  public Exam Subject;
  public Student Student;
  public int Score;
}

List<Student> students;
var stu1 = students.Single(s => s.Name == "鈴木"); // 生徒の検索
stu1.ExamResults.Single(r => r.Subject.Name == "国語" && r.Subject.Date == new DateTime(2008, 7, 10)).Score; // 成績の参照
stu1.ExamResults.Add(new ExamResult { Subject = exam1, Score = 80 }); // 成績情報の追加
0063デフォルトの名無しさん2008/09/29(月) 23:45:32
>>49
は配列を入れてるZE
0064デフォルトの名無しさん2008/09/29(月) 23:58:48
>>61
いや意味わからんよ。
だからDictionary使うのであれば、Valueは「生徒(の成績)クラス」のインスタンスなんだよ?
0065デフォルトの名無しさん2008/09/30(火) 10:46:45
staticなクラスとかって、どういう時に使うものなんでしょうか?
無理して使う位なら普通のクラスにしてインスタンス生成した方が
いいんでしょうか?
インスタンス生成しなくて良いという事位しか分かりません…。
0066デフォルトの名無しさん2008/09/30(火) 10:57:37
大雑把に言うと状態を持たない(フィールドがない)ことを保証できるクラスならstatic classにできるな
Mathとかね
まあ慣れん間はわざわざ作ることもないか
0067デフォルトの名無しさん2008/09/30(火) 11:15:06
なるほど。「フィールドがない」というパターンで考えると
分かり易いですね。参考になりました。有り難う御座いました。
0068デフォルトの名無しさん2008/09/30(火) 13:19:51
フィールド持っててもOO的に複数のクラスと関連があるけど
決してそのクラスがほかのクラスの参照を持つわけではなかったりした時
staticクラスにする方がいいの?
0069デフォルトの名無しさん2008/09/30(火) 13:31:25
フィールドが全部static readonlyまたはconstでない限りはやめたほうがいい
0070692008/09/30(火) 13:38:53
static readonlyっていうのはおかしいな
同じメソッドを同じ引数で呼び出したらいつも同じ結果が得られるならstaticでおk
0071デフォルトの名無しさん2008/09/30(火) 16:16:17
web上で指定した名前のhtmlファイルやtextファイルが存在するかどうかをチェックするには
どういうプログラムを組めばいいでしょうか?

req = (HttpWebRequest)WebRequest.Create("http://hoge.com/ahya.txt");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();

if ("http://hoge.com/ahya.txt".Equals(res.ResponseUri))
{
Console.Writeline("指定されたtxtファイルはありましたよ( ´∀`)b");
}

のようなプログラムを組めばよろしいでしょうか?
それとももっと適切なプログラムがありますか?
0072デフォルトの名無しさん2008/09/30(火) 16:22:44
何をもって存在したのかという定義は?
res.StatusCode が200ならというだけじゃダメなのかな。
0073デフォルトの名無しさん2008/09/30(火) 16:23:21
200つーか、 HttpStatusCode.OKか
0074デフォルトの名無しさん2008/09/30(火) 16:29:22
リダイレクト考えると大変かもね
FileNotFoundのときにリダイレクトで200 OKな404.html返してきたり
0075デフォルトの名無しさん2008/09/30(火) 16:42:49
>>71
それだと HTTP GET してしまうので
req.Method = "HEAD"; するとか
0076712008/09/30(火) 16:54:42
>>72-74
そうなんですよ。リダイレクトするサーバーだと指定したファイルが存在しない
違うページに飛ばされた上で200:OKが返されたりするんで判定に使うには
今一歩信頼性が無いんです。
0077デフォルトの名無しさん2008/09/30(火) 17:02:39
いやだから定義は?
URL完全一致なの?
別の場所にリダイレクトするけど同じファイル名だったりするのはどうなの?
0078デフォルトの名無しさん2008/09/30(火) 17:03:28
とは言えどうしようもないんじゃないかなHTTPの仕様上
リダイレクトされたら存在しないとするってんなら多少は簡単になるが
存在しなくても200 OKを返すって挙動も可能なんだし(負荷が大きくなるから普通はしないだろうが)
0079712008/09/30(火) 17:08:26
>>77
はい、指定した場所にURLが一致するファイルが存在しなければ
そのURLは無効というふうに判断したいです。
リダイレクトされた場合は存在しないと判断したいです。
0080デフォルトの名無しさん2008/09/30(火) 17:14:07
あと、どっちかというと

Uri uri = new Uri("http://hoge.com/ahya.txt");
if (uri.Equals(res.ResponseUri))

だろうなあ。
0081デフォルトの名無しさん2008/09/30(火) 18:15:00
HttpWebRequestのメンバにリダイレクトを処理するかどうかのプロパティあったろ。
それ無効にしといて、200帰るかどうかみりゃいいんじゃないのか。
0082デフォルトの名無しさん2008/09/30(火) 18:18:29
>リダイレクトを処理するかどうかのプロパティ
そんなのあったのか、知らなかった
0083デフォルトの名無しさん2008/09/30(火) 19:00:04
ListViewやStringなど標準ライブラリのソースを見る方法はないですか?
0084デフォルトの名無しさん2008/09/30(火) 19:07:21
ちょっとは検索しろ
0085デフォルトの名無しさん2008/09/30(火) 19:08:13
MSのを見るのは会社の規模&審査とすさまじい金額がかかったはずなので、MONOのソースでも見たら?
0086デフォルトの名無しさん2008/09/30(火) 19:11:02
http://www.codeplex.com/NetMassDownloader
0087デフォルトの名無しさん2008/09/30(火) 19:12:52
>>85
今は閲覧目的に限り無償一般公開されてるんだよ
0088デフォルトの名無しさん2008/09/30(火) 19:52:54
へー
0089デフォルトの名無しさん2008/09/30(火) 20:07:15
独学でC#はじめたんですがsetとgetの使い方がよくわかりません。
よろしければ御教授ください、お願いします。
0090デフォルトの名無しさん2008/09/30(火) 20:09:22
それを言うなら御教示だ
0091892008/09/30(火) 20:30:45
>>90
すみません間違えました
0092デフォルトの名無しさん2008/09/30(火) 20:31:23
>>89
プロパティのことか?
強いて言うなら、変数っぽいメソッドを作るための仕様という感じかな?
C#の入門サイトで理解できなかったら、いっそうのこと他の言語のサイトも見てみると理解できることもあるかもしれない。

たとえばTextBoxでTextプロパティがあるけど、これをプロパティを使わないでやるとしたら
textbox1.SetText("hogera");
String hoge = textbox1.GetText();と書かなければならない。

もちろん
class TextBox
{
 public String Text;
}
として公開してしまえばtextbox1.Text = "hogera";で書き込み読み込みができるが、
SetText(String value)
{ // ReadOnlyの時は変更禁止 (こういう処理を副作用と言う)
  if (!this.ReadOnly)   this.str = value;
}
というようなことはできなくなる。これをできるようにするためのものがプロパティ
public String str; // Textの実体。こんなダサイ名前をつけるのはよろしくないけど
public String Text{
 get { return this.str;}
 set { if (!this.ReadOnly)   this.str = value;}
}
これでtextbox1.Text = "hoge"とかができるようになる。
また、副作用のないプロパティは(今後、副作用を設定するかもしれないので必要)
public String Text { get; set;}と書くことができる
0093892008/09/30(火) 20:42:27
>>92
すごく丁寧な説明ありがとうございます。なんとか理解できました。
0094712008/09/30(火) 20:43:19
>>81
どうもです。

req.AllowAutoRedirect = false;

でオートリダイレクトを拒否することができるようになりました( ´∀`)ノシ
0095デフォルトの名無しさん2008/09/30(火) 20:45:20
>>92
それだったらメソッドで書けばいいだろ
なんでプロパティ使うんだよ
0096デフォルトの名無しさん2008/09/30(火) 20:46:52
>>95
だったら、とはどういう意味?
0097デフォルトの名無しさん2008/09/30(火) 20:47:17
プロパティにする利点は使う側にある
0098デフォルトの名無しさん2008/09/30(火) 20:54:38
String と string ってどうちがうの?
0099デフォルトの名無しさん2008/09/30(火) 20:55:50
まったく同じであることが言語仕様に明記されています
0100デフォルトの名無しさん2008/09/30(火) 21:00:25
ごめんなさい
0101デフォルトの名無しさん2008/09/30(火) 21:22:37
質問です。
クリップボードからテキストボックスに文字を貼りつけています。
単に貼りつけると、テキストボックスで文字入力できなくなるので、
・クリップボードの文字をメモリーする。
・クリップボードの文字がメモリーと異なるときは、貼りつける。
・クリップボードの文字がメモリーとおなじときは、なにもしない。
という処理を考えました。

clipboardwatchtimer.Interval = 500;
clipboardwatchtimer.Enabled = true;

private void clipboardwatchtimer_Tick(object sender, EventArgs e){
if (Clipboard.ContainsText()) {
string clipboardTextBefore = (Clipboard.GetText());
System.Threading.Thread.Sleep(200);
string clipboardTextAfter = (Clipboard.GetText());
if (clipboardTextAfter != clipboardTextBefore)
{textBox1.Text = (Clipboard.GetText());}
}}
これで、4回は動くのですが、そのあとは取得できなくなってしまいます。
アドバイスお願いします。
■ このスレッドは過去ログ倉庫に格納されています