1 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:57:16 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 前スレ ふらっとC#,C♯,C#(初心者用) Part45 pc12.2ch.net/test/read.cgi/tech/1253522504/
41 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 11:01:15 ] Windows mobile プロジェクトを5つ含むソリューションをフォルダごと移動したら mobile cab 配置プロジェクトの依存関係がまったく表示されなくなって ビルドすると HRESULT=80004005 エラー が出ます 同じ目的で新しい配置プロジェクトを作っても問題は変わりません ターゲットプロジェクトはビルドできるし、正常に起動します どうしたらいいでしょうか?
42 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 11:01:47 ] やはりそうですか。 確かに例外とか投げてくれるとうれしいけど、 フォアグラウンドでやればええやん、って話にしかならないのかな。
43 名前:41 mailto:sage [2009/10/17(土) 11:14:05 ] 自己解決 移動前にコンパイルエラーを出していたプロジェクトが勝手にソリューションから外れてました それを追加して配置プロジェクトの構成で該当プロジェクトを含むようにプロパティを変更したら治りました お騒がせしました
44 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:54:19 ] こんにちは。どなたかC♯でBMI計算プログラムをvisual studio 2008 もしくは2005 で作成してアップしてくださいませんか・・・? そのプロジェクトフォルダ全部をアップお願いします。
45 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:54:53 ] そういうスレじゃないから死になさい
46 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:00:45 ] >>44 いくら払えるの?
47 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:43:13 ] 宿題スレ行け
48 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:45:11 ] BMI=体重/(身長^2) たったこんだけの式なんだがどんだけリッチなフォームなら納得してもらえるのやらw 萌えキャラが脱ぎながらアドバイスとかしてくれれば完璧かな
49 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:51:17 ] そのキャラをマウスで回転させたりできるようにしてくれ。 どんな角度からも見えるようにな
50 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:52:31 ] どうせ大学の課題かなんかだろうけど、こんなにクズが大学生なんて日本はどうなってるの?
51 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:56:59 ] こうなってる
52 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:08:10 ] ヤフーの知恵なんとかも宿題処理場化してるかんじがある。
53 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:09:13 ] あそこはゆとりがゆとりを助けてる慣れ合い場だろ
54 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 16:17:23 ] HTML文字列からWebBrowserを使わずに、構文解析してDOMオブジェクトを取得することってできますか
55 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 16:24:58 ] >>54 C# html でググれ。
56 名前:デフォルトの名無しさん [2009/10/17(土) 18:23:14 ] Webサーバー上のSQLサーバーにあるデータを全件(約2万件)、 データセット内のテーブルに格納し、 そのテーブルに対してSQLを発行し、 必要な条件のデータのみ(約2千件)を別のテーブルに保持したいと思っています。 このようなことを実現することは可能でしょうか? どうすれば実現ができますでしょうか? それは可能でしょうか?
57 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:27:54 ] >>56 2万件のデータを一度にコントロールにぶち込むなんて、アホのすることじゃね?
58 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:31:15 ] >>56 「別のテーブル」がSQLサーバの別のテーブルならば、T-SQL使ってサーバ側 だけで実施させるのが吉。 ローカルファイルとしてのテーブルなら、DataSetに取り込んであとは自由にどう にでも。
59 名前:デフォルトの名無しさん [2009/10/17(土) 18:52:44 ] ありがとうございます。 「別のテーブル」とは、同じデータセット内に予め作成するテーブルを想定しています。 2万件のデータは、月別商品別の売上データです。 C#アプリケーションで、期間を指定して、売上情報を表示させたいのですが、 期間を変更するたびにWebサーバー上のSQLサーバーのデータを取得するようにしたところ、 検索ボタンを押して結果が表示されるまでに10秒ほどかかってしまうんです。 なので、アプリケーション起動時に全データをデータセット内に保持して、 検索のつどSQLサーバーにアクセスせず、スピードを高めたいと思っています。 2万件のデータは項目数自体は20項目ほどで少ないので、スプラッシュウィンドウを数秒表示させることにより、 起動時の読込時間をカバーしたいと思っています。
60 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:54:25 ] それはしかたないことじゃないかな・・・ テーブルに置いちゃうのもいいけどそういった社内情報とかは常に最新のものを使った方がいいんじゃないかな? と俺だけが思うことで流される必要はない!がんばれ!
61 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:04:23 ] >>59 やっぱり分かってないな。 (アホ呼ばわりもう一回しようと思ったけど初心者スレだったことを思い出した) RDBがあるときは、検索処理はRDBにやらせるんだよ。
62 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:14:15 ] 10秒かかるって、クエリーがよっぽどくさってるか、インデックス設計がおかしいだろ。
63 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:18:32 ] 2万件なら一瞬で取れる量だよね。 普通に設計すれば。
64 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:19:57 ] >>59 自分もそう言うので悩んでるところなんだ。 結論から言えば出来るでしょ。 単純に SqlDataAdpter (だっけ?)クラスを使用してデータを DataTable に受ければ ローカルにデータを保存することが出来るし、表示するデータを絞るとかなら DataView クラスを 使えると思うし。 でも先にその 10 秒の内訳と用件/制限の確認をした方がいいと思うよ。 仮にデータの抽出に時間が掛かってるだけなら、本職の RDB よりも速くできるかわかんないし。 それなら、テーブル設計を見直した方がいいかもしれない。 自分が試した範囲だと、データの転送や表示には数万件レベルでも思ってたよりは時間掛かってなかった。 更新が頻繁に掛かるテーブルなら、(すでに言われてるけど)ローカルの古いデータを元に 処理をしたんじゃ問題が生じることもあるかも知れないし。
65 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:22:03 ] WebサーバーといってるからWebServiceを使ってるんじゃね? あれはうまく調整しないとパフォーマンスが出ない。
66 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:29:53 ] うん、そうかもしれんね。 この前9列7万件近いデータを datatable に取り込んだことあるけど なんかほんと一瞬って感じで終わってびっくらこいたことある。 キャッシュか何か効いてたのかな? 経験が全然ないからよくわかんないけど。 あるいは何かかんちがいしてたのかもしれん。 でもまぁ、月別商品別の情報ってことは 過去の販売データのまとめだろうし、 一度にとってもいいんじゃないのかな。
67 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:44:38 ] ManagementStudioで同SQLでかかる時間をまず計測してみ。 それで10秒かかるならSQLを見直す。 3層サーバとすると、次にWebサービスから呼び出してかかる時間を計測、次にアプリから呼んだ時にかかる時間、最後にアプリから呼んだ後にgridviewかなんかにバインドするまでの時間を計測してどこがボトルネックかを調べなさい。
68 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:48:54 ] >>59 おれ中学生だけど社会人でこの程度もわからない人でも仕事もらえるんだな? 最近パソコン始めたおれでもできる
69 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:51:06 ] インデクスはってないんじゃねぇの
70 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 19:53:10 ] >>59 仕事は会社が受けるからな。 だから優秀な人間にお鉢が回り、優秀な人間からこの業界から去っていく。
71 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:00:18 ] >>70 いい加減、そういうネトウヨチックな被害妄想の恥ずかしさに 気づくようになった方がいいんじゃない? ま無理には勧めないが。
72 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:01:45 ] 2chで自己紹介しちゃうゆとりが痛すぎて直視できない
73 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:05:56 ] 俺も中学生だけどこのスレの中でいちばんゆうしゅうだと思うぜ。
74 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:11:37 ] >>71 一部のできる人間ができない人間を食わせているのは事実だろ? あおりでもなんでもなくね。
75 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:20:39 ] >>74 そりゃそうだが、そんなの「パレートの法則」なんて言われるぐらい当たり前で どこの組織にも見られる現象でしょ。 >>70 がそうだと断言はしないが、なーんか自分が(前の)会社で上手くいかなかったことを 単に「合理化」(防衛機制って奴ね)しようとしてるようにも見えちゃうよね。 そうでなくても、>>70 のような文章には、なんか「2chで俺は世の中の真実に目覚めた(マスゴミ?w特亜?w)」 ぐらいの勢いで思ってるウブなネトウヨのような青い臭いを感じて、読んでるこっちが 気恥ずかしくなるものがあるよ。
76 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:22:56 ]
77 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:24:12 ] 日本語で
78 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:25:26 ] いやー、良い勝負だとおもうな>>70 も>>75 もw
79 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:26:55 ] 両方とも十把一絡げにしようとしてる時点で青い
80 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:29:04 ] 顔真っ赤な75の反論↓
81 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:32:35 ] 類は友を呼ぶ & 同族嫌悪 って事だな。
82 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:32:56 ] え?おれ?
83 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:37:24 ] 何の話?
84 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 20:43:34 ] 俺だよ俺
85 名前:デフォルトの名無しさん [2009/10/17(土) 21:06:46 ] ふらっとで煽り合いとかゆとってるなぁ
86 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:29:00 ] ゆとってるって始めて聞いた
87 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:33:21 ] ゆとってるってなんだよ かゆとってるだろw
88 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:38:59 ] (´・∀・`)
89 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:40:28 ] 煽りあいじゃなく1人がファビョってるようにみえる。
90 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 22:50:47 ] で、>>68 にお手本を見せて貰いたいものだと思う自分がいる。
91 名前:デフォルトの名無しさん [2009/10/18(日) 00:13:20 ] TreeViewのノードに、商品名を表示させて、さらにタブ(エスケープ文字?)を入れて、 価格を表示させたいと思っているんだけど、 ノードの表示名のパラメーターにエスケープ文字は使用できないのでしょうか?
92 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 00:21:12 ] TreeViewにはXMLのデータ突っ込んでるってことかな? 普通に>とかの文字ならそんなことせずに表示できると思うけど
93 名前:デフォルトの名無しさん [2009/10/18(日) 00:47:49 ] >>92 さんありがとうございます。 XMLのデータは使用していません。 Atree.Nodes.Add(01, "商品A" + "\t"+ "単価1,000円"); としたときに、\tが効かなく無視されているようなんです (>_<)。
94 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 00:53:30 ] \\t
95 名前:デフォルトの名無しさん [2009/10/18(日) 00:57:12 ] >>94 それだと \t という文字がそのまま表示されない?
96 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 01:36:03 ] 無理。
97 名前:デフォルトの名無しさん [2009/10/18(日) 01:41:53 ] できませんでしょうか…。
98 名前:中学生 mailto:sage [2009/10/18(日) 02:56:15 ] >>97 "商品A" + @"\t"+ "単価1,000円" ちょっと調べればわかることなんだけどバカなの?おじさんw
99 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 06:54:46 ] デザインのプロパティで、ノードの描画方法を「システム自動」から、 「文字列だけプログラマが描画する」に変更する。 TreeView.DrowMode プロパティを TreeViewDrowMode.OwnerDrawText にする。 // デザイナでButtonのClickイベントに private void button1_Click(object sender, EventArgs e) { TreeNode node1 = new TreeNode("abcde"); TreeNode node2 = new TreeNode("XYZ"); // TagはObject型の物を入れておける。使用時にキャストとかする。 node1.Tag = 123; node2.Tag = 98765; treeView1.Nodes.Add(node1); treeView1.Nodes.Add(node2); }
100 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 07:14:14 ] >>98 やはり中学生程度には無理かw
101 名前:99 mailto:sage [2009/10/18(日) 07:15:51 ] // デザイナでTreeViewのDrawNodeイベントへ private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { // 大きな意味はない。e.Graphics.DrawXXX(...) // たぶん省略したいだけ Graphics g = e.Graphics; // ノードの描画で使われるフォントの指定。 // 今回は、Font(string システムにあるフォント名, float フォントサイズ) Font f = new Font("MS UI Gothic", 10f); // 文字列描画(string ノードのテキスト ,Font 描画フォント, Brush 今回は青or赤を指定 ,Point 描画の開始位置); g.DrawString(e.Node.Text, f, Brushes.Blue, new Point(e.Node.Bounds.X, e.Node.Bounds.Y)); g.DrawString(e.Node.Tag.ToString(), f, Brushes.Red, new Point(e.Node.Bounds.X + 50, e.Node.Bounds.Y)); } インデントに全角スペースを使っているので置き換えて試して。 自分で言うのも変だが、全然初心者向きじゃないコードでごめん。 そもそもツリー作っていないし。
102 名前:デフォルトの名無しさん [2009/10/18(日) 07:40:16 ] >>98 それだと、\tって表示されるだけだろ? 本当のやり方を書いてみなよ。
103 名前:本当の中学生 mailto:sage [2009/10/18(日) 07:46:00 ] >>98 ちょっと調べてから書き込めよ。 馬鹿を晒すな。
104 名前:99 mailto:sage [2009/10/18(日) 07:55:25 ] tp://nekokan.bex.jp/monpuchi/38DAB7FD5615087DA45D326E0C5B60750C3400FF.jpg 念のため言うけれど、見下しているわけではないから。 やっぱり最初は、Hello World!なわけで。 オーナードロー、下手にこりだすと止まらなくなるし…。
105 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 07:57:25 ] バカがバカを煽って何やってんだか。 質問に答えた上で言えよw オレ?もっとバカだから無理。全角スペースで我慢して下さい。
106 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 08:03:07 ] >>104 これはTabではないよね。 こんなんでよければ半角スペースをうちこめばいい。
107 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 08:34:05 ] >>106 プロポーショナルフォントで半角スペースを打ち込んで調節するのか?w
108 名前:中学生 mailto:sage [2009/10/18(日) 09:43:06 ] >>93 ほらよ。感謝しろよ "商品A" + \t+ "単価1,000円 それからな、ツリーはそういうことをするためのものじゃないから おまえの設計が間違ってる それでお前が思ったようなことができたとしても そんな独自仕様扱いにくくて誰も使わないぞ
109 名前:中学生 mailto:sage [2009/10/18(日) 09:45:44 ] >>105 どうせ、エクセルかなんかのタブ区切り文字列を そのままつっこみたいんだろ?w お前こそちゃんと答えろハゲ 妥協案なんていらないんだよチンカス
110 名前:中学生 mailto:sage [2009/10/18(日) 09:50:18 ] >>108-109 人の名前語ってんじゃねーよゴミが ちゃんとコンパイルしてからコード書けカス
111 名前:中学生 mailto:sage [2009/10/18(日) 09:54:45 ] >>93 "商品A" + \\t+ "単価1,000円" これでできないとは言わせないぞ。おっさん。
112 名前:中学生 mailto:sage [2009/10/18(日) 10:10:52 ] >>93 "商品A" + "\\t" + "単価1,000円" これが正解。
113 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:34:54 ] MSDNのサイトが新しくなってFirefoxでも崩れなくなってるね なのにIDEのブラウザだとまともに見れないのはなぜ?
114 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:41:11 ] >>108-112 不正解。 間違いをここまで偉そうに語れるのはすごいわ。
115 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:12:17 ] 正解を語らずにここまで偉そうなのもすごいと思うよ
116 名前:中学生 mailto:sage [2009/10/18(日) 12:52:04 ] >>114 試しもしないで何言ってんのこのおっさんは。
117 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:01:09 ] >>116 オマエガナー
118 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:02:57 ] できませんが正解だろ。
119 名前:中学生 mailto:sage [2009/10/18(日) 13:05:13 ] 言いたいことはそれだけか? 交信を終了する
120 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:06:57 ] ∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
121 名前:中学生 mailto:sage [2009/10/18(日) 13:15:04 ] おっさんになんかなりたくないなー。 年とると馬鹿になるのかねぇ。
122 名前:中学生 mailto:sage [2009/10/18(日) 13:18:24 ] >>121 人のふんどしで踊るなハゲ 目立ちたかったら自分で考えろチンカス
123 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:21:25 ] 踊る阿呆に見る阿呆。同じ阿呆なら踊らにゃ損々 ってなわけで、今日も全力で釣り針に食らいつく
124 名前:中学生 mailto:sage [2009/10/18(日) 13:27:40 ] \tも知らずにプロ面してんのかよー。 おっさんは記憶力がないから困るわ
125 名前:小学生 mailto:sage [2009/10/18(日) 13:28:32 ] そんなにそのコテ気に入ったならくれてやるよ
126 名前:中学生 mailto:sage [2009/10/18(日) 13:29:50 ] 踊らにゃ損々♪ >>124 馬鹿は黙って踊ってろ♪
127 名前:中学生 ◆gTss8OfLRY mailto:sage [2009/10/18(日) 13:38:16 ] 誰が誰だか分からんw
128 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:38:55 ] というか、TreeViewノードの深度によってテキストの開始x座標が変わるのに、 タブで無理やりそろえようなんてそもそも無駄だと思うんだが。 素直にListViewやDataSetあたりを使うか、 ListBoxをオーナードローするなりすればいいのに。
129 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:44:01 ] わかっててエスケープ文字のリテラル表記の話にしてふざけてるのだろうけど、 TreeViewにTabを処理する機能がそもそもないから、 オーナードローでもしなきゃ無理って話だろ。 WPFならスマートにそういった機能拡張はできるよ。
130 名前:小学生 mailto:sage [2009/10/18(日) 13:45:46 ] >>93 どんなフォーム作ってるんだ? ちょっとjpgで見せてくれよwwおっさんww
131 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:56:01 ] くだらないあおりとかはせいぜい10レス目以降は自重してくれよ。
132 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:16:59 ] いままでC#とかVBやってきたんだけど継承ってほとんどやったことなくて、いつ使うべきかいまだに変わんない。 メソッドとか重複する時に使うんだなって頭でいるけどそれでいいの? 継承も使ったことないから、もちろんinterfaceも宣言したことない。 そのせいか親クラスはいつも子だくさん。 ほんと孕ませてばっかです。
133 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:24:06 ] 継承をほとんどやった事がないのに、親クラスが子だくさん…?
134 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:25:20 ] 包含かね?
135 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:26:35 ] public class *** { class *** { class *** { class *** { class *** { } ∞ } } } }
136 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:27:37 ] 入れ子ね。
137 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:29:31 ] 自分ではもっとItestとかインタフェースってものを書いてみたいんだけど、機会がないから・・・ それに継承って、デバッグするとき継承先を辿る必要があったりするから難読化するんじゃないかなと思ってみたり。
138 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:30:48 ] 入れ子のほうがわかんない。使って便利なときってあるの?
139 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:33:36 ] newするときとか見た目でわかると自分では思ってる。 microsoft.windwos.vista.netとか見た目でどこ読んでるか想像が付くし、書く時も大体の勘でかけたりするからいいkなぁって。 だめかな?w わかんないや
140 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:35:18 ] ここまですべて俺の自演
141 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:35:40 ] >>139 ダメ ガイドライン違反