ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
720:デフォルトの名無しさん
09/04/05 09:26:10
>>717
ありません
自動プロパティの使用をやめるか普通にコンストラクタで初期化してください

721:デフォルトの名無しさん
09/04/05 09:52:29
>>717
リフレクションでstring型のプロパティを一括初期化できなくもないがバグの元だな

722:デフォルトの名無しさん
09/04/05 09:58:22
そのためのオブジェクト初期化子なんだろうか

723:デフォルトの名無しさん
09/04/05 09:59:50
ヘジさんが自動プロパティに必死で抵抗してたのは直接初期化できないからなのかな

724:デフォルトの名無しさん
09/04/05 10:12:36
自動プロパティって、文法的にインターフェースでの宣言と一緒なのがちょっと気になるっちゃ気になる。

int Method();

とだけ書いたらメソッドの中身ができちゃうようなもんだからなぁ。
パッと見同じだけど全然意味の違うものってのは、
ミスの原因だし、読むときの混乱招くから。

725:デフォルトの名無しさん
09/04/05 10:12:47
コンストラクタで初期化するくらいなら、
タイピング量的に自動プロパティである必要がぜんぜんないな

726:デフォルトの名無しさん
09/04/05 10:14:42
もう、自動プロパティを自動で普通のプロパティに展開するユーティリティを使えばいいよ

727:デフォルトの名無しさん
09/04/05 10:22:42
private string _test;
public string Test { get _test; set _test; }

こういう糖衣構文を可能にするだけでよかったんだよ

728:デフォルトの名無しさん
09/04/05 10:26:55
糖衣構文といいたいだけのやつ増えすぎ

729:デフォルトの名無しさん
09/04/05 10:29:42
構文糖を可能にするだけでよかったんだよ

730:デフォルトの名無しさん
09/04/05 10:30:46
public property string Test = "";

でいいんじゃないの

public readonly property string Test = "";

とか

731:デフォルトの名無しさん
09/04/05 10:36:05
public string Test { get GetTest(); set SetTest(value); }
も可能そうだな


732:デフォルトの名無しさん
09/04/05 10:41:00
>>731
それは意味がわからない。普通にかけばいいだろ
public string Test { get { return GetTest(); } set { SetTest(value); } }

733:デフォルトの名無しさん
09/04/05 10:41:50
インターフェイスにプロパティを宣言するときの書き方と合わせたかったんだろ
美学ってやつなんだろう

734:デフォルトの名無しさん
09/04/05 10:48:09
たとえ美学でも、読み取り専用にするprivate set;はせっかくの省力構文を台無しにしているな
public string Test { get; }
これで何がまずいのだろう

735:デフォルトの名無しさん
09/04/05 10:48:47
event の構文が

event DelegateType Variable;
event DelegateType Variable { add { ...] remove { ...} }

なのを考えると、

property VarType Variable;
property VarType Variable { set { ... } get { ...} }

がよかった気もするなぁ。


736:デフォルトの名無しさん
09/04/05 10:50:10
>>732
楽になるじゃん
それに変数とメソッドを同時に書くこともある
public string Test { get GetTest(); set _test; }


737:デフォルトの名無しさん
09/04/05 10:52:33
property Name: string read FName write FName;
もうこれでいいよ

738:デフォルトの名無しさん
09/04/05 10:54:11
>>735
それいいよね
読み取り専用プロパティは
readonly property VarType Variable;
にすればいいし

739:デフォルトの名無しさん
09/04/05 11:03:07
>>734
初期化も何もできないじゃん

740:デフォルトの名無しさん
09/04/05 11:26:12
>>739
private set;と書いたことにする

741:デフォルトの名無しさん
09/04/05 11:44:34
それなら>>735スタイルにしてgetも書かないようにしないとおかしい
アクセサを宣言する意味でgetやsetを書いてるのに

742:デフォルトの名無しさん
09/04/05 13:04:59
>>740
( ゚д゚ )

743:デフォルトの名無しさん
09/04/05 15:08:15
アクセス修飾子をpublicとprivateだけと思ってる奴が多いようだな

744:デフォルトの名無しさん
09/04/05 16:25:18
そんな奴いないだろw
もともとはプロパティのアクセサにアクセスレベルは指定できなかったんだよ
public get; protected set;みたいなのはそもそも想定されてなかった
だから別に>>735の形になっててもおかしくはない

745:デフォルトの名無しさん
09/04/05 18:13:05
addとremoveが必須なeventとgetとsetは片方あればいいプロパティじゃ初めから条件が違うな

746:デフォルトの名無しさん
09/04/05 18:55:27
話の流れを全部理解しているわけじゃないが、
そういうシンメトリックかどうかって話じゃないだろうw

素直に(VB方式ともいう)propertyってキーワードを導入しておいた方が
可読性の観点からは好ましかったんじゃないかって話なんじゃないの?

747:デフォルトの名無しさん
09/04/05 22:23:51
でもevent 型 名前;と型 名前 { get; set; }じゃ差がありすぎるからなあ
イベントを理解する上でプロパティとの類似性はかなり重要なのに
構文上全然違う種類のものになっちゃってるのはさすがに

748:デフォルトの名無しさん
09/04/05 22:43:42
そういや、結構いろんな言語に精通してる同僚が最近 C# 触り始めたんだけど、
event 知らずに普通にデリゲート型のプロパティ使ってたなぁ。


749:デフォルトの名無しさん
09/04/05 22:51:16
イベントって機能がデリゲートで実現されていることを知らずにイベントを
使ってるって話ならありそうだが、デリゲート押さえてるのにイベント知らない、
なんてこと普通はありえん気がするけどね。

750:デフォルトの名無しさん
09/04/05 22:55:20
eventって別に必要ない機能だろ

751:デフォルトの名無しさん
09/04/05 22:58:49
javaなんかでよく出てくるgetHoge, setHogeパターンを言語に組み込んだのがプロパティ
同様にaddHogeListener, removeHogeListenerパターンを言語に組み込んだのがイベント

752:デフォルトの名無しさん
09/04/05 23:29:37
言語に組み込む組み込まないの話ではないだろ

753:デフォルトの名無しさん
09/04/05 23:49:33
>>749
「デリゲートはイベント処理用のもの」って認識だとそうなんだけど、
「関数ポインタの便利版」って認識だと、
関数ポインタのプロパティでイベントハンドラ取ればいいやってなってもおかしくないかと。


754:デフォルトの名無しさん
09/04/05 23:56:59
もしプロパティを使うならデリゲートのコレクションを返すべきだろ
button.ClickEventHandlers.Add(new EventHandler(button_Click));
これなら意味的には同じ

755:754
09/04/05 23:59:32
外からの要素へのアクセスはできないようにしないといけないよもちろん
マルチキャストでいいだろと突っ込まれそうだから一応

756:デフォルトの名無しさん
09/04/06 00:00:30
Formsのコントロールの初期化をデザイナーで作っているところなんだが、
ツールバーのボタンが横に並んだ1つづりのPNGファイルを
ImageListを使って切り出して使おうとしているのだがうまくいかない。

System.Windows.Forms.ImageList il = new System.Windows.Forms.ImageList();
il.TransparentColor = System.Drawing.Color.Transparent;
il.ImageSize = new System.Drawing.Size(24, 24);
il.Images.AddStrip(Resources.tool);

こんな風に書いてデザイナーに読ませると、AddStrip()が認識できずに落ちてしまうようだ。
仕方がないのでpartialされたForm本体側で追加で初期化してるんだが、当然ながらデザイナーではプレビューできない。
画像の切り出し、切り出したチップをそれぞれのコントロールで使用したいんだがどうしたらいいだろうか。

757:デフォルトの名無しさん
09/04/06 00:10:38
>>748
eventをつけた場合とつけない場合は何が違うのですか?
public event EventHandler Unko;
public EventHandler Unko

758:デフォルトの名無しさん
09/04/06 00:13:42
>>757
ググれかす
見た目としては、eventだと外から行える操作がデリゲートの追加と削除だけになる。

759:デフォルトの名無しさん
09/04/06 00:17:51
>>757
Unkoの硬さが違ってくる

760:デフォルトの名無しさん
09/04/06 00:23:11
>>758-759
ありがとう。
何となく分かったよ
Unkoの硬さが+=と-=だけになるってことですね

761:デフォルトの名無しさん
09/04/06 00:28:52
>>756
デザイナで設定するのは無理なんじゃないの
とりあえずImageListプロパティだけ設定して,Tagプロパティにインデックスを入れといて
後でコードから舐めてImageIndexプロパティに設定し直すとか

762:デフォルトの名無しさん
09/04/06 01:04:40
>>761
ありがとう。「無理」という返事を聞いてある意味安心した。

どうせデザイナーで作る部分はある程度静的な割付になるので、わざわざTagに入れてループをまわさなくても、
ImageList.Images プロパティをControl.Image に直接代入していくだけで十分だね。

763:デフォルトの名無しさん
09/04/06 01:22:48
>>762
ImageList継承して"ImageStrip"のようなプロパティを追加するとか、
あるいは最初から目的のイメージを持たせちゃうとかすれば出来る気もする。

っていうか、なんでわざわざそんなC#向きでない作り方をするんだろう。
なんでも道具にあった作り方ってあると思うんだけど。

764:デフォルトの名無しさん
09/04/06 01:24:20
あーImageListってシールされてるのか。。

765:デフォルトの名無しさん
09/04/06 01:59:32
String型がシールされてる上にIStringのようなインターフェイスもないってどういうこと?
String型に限らずやたらシールされると拡張できなくて異常に不便

766:デフォルトの名無しさん
09/04/06 02:02:16
C#の入門誌のオススメ教えて

767:デフォルトの名無しさん
09/04/06 02:04:16
C#に入門書は必要ない
ぐぐれば腐るほどでてくるからな・・・
強いて言えば逆引き系のものがいいよ

768:デフォルトの名無しさん
09/04/06 02:04:39
継承は最低の方法だってみんな分かって来てるじゃない
それはともかくStringはIEnumerable<char>として扱うと便利だよ

769:デフォルトの名無しさん
09/04/06 03:31:43
>>763
コントロールで使う画像の処理をImageListに任せるのは、
Win32SDK時代から続く古式ゆかしいお作法なんだ。

770:デフォルトの名無しさん
09/04/06 08:32:28
> それはともかくStringはIEnumerable<char>として扱うと便利だよ
これは気づかなかった。ありがとう

771:デフォルトの名無しさん
09/04/06 09:03:50
デザイナーいるとかうらやましいなおい・・・・

772:デフォルトの名無しさん
09/04/06 09:26:25
>>765
恥ずかしいレスだなおいw

773:デフォルトの名無しさん
09/04/06 09:31:03
>>771
それはボケなのか……?

774:デフォルトの名無しさん
09/04/06 10:42:32
Stringがsealedなのはimmutableにするため
変更できない方が扱いやすいから

775:デフォルトの名無しさん
09/04/06 17:54:34
扱いやすいっていうか、継承を禁止しないとイミュータブルであることを保証できない。

776:デフォルトの名無しさん
09/04/06 18:04:25
なんとなくだが、>>774
"stringはimmutableであった方が扱いやすい"
と言いたかったのではないかと思う。

777:デフォルトの名無しさん
09/04/06 21:19:49
>>766
洋書なら色々あるけど、邦訳版が出てないのが多い・・・。

778:デフォルトの名無しさん
09/04/07 02:18:55
C#って検索数がいまいちなんだよね。
なんで?

779:デフォルトの名無しさん
09/04/07 02:34:22
>>778
記号とか入いってるとかは検索エンジン的にマイナスな気がする。
あと、なんだかんだいって後発だしね。
それと、一般名詞そのまま使ってるrubyとかと比べりゃそりゃ少なくなる。

780:デフォルトの名無しさん
09/04/07 03:42:38
思いつくままに検索してみた。言うほど少なくは無いようだが

php の検索結果 約 9,700,000,000 件
javascript の検索結果 約 680,000,000 件
vb の検索結果 約 657,000,000 件
java の検索結果 約 377,000,000 件
scheme の検索結果 約 107,000,000 件
ruby の検索結果 約 102,000,000 件
c++ の検索結果 約 101,000,000 件
perl の検索結果 約 88,000,000 件
c# の検索結果 約 63,900,000 件
python の検索結果 約 62,300,000 件
delphi の検索結果 約 49,500,000 件
lisp の検索結果 約 8,290,000 件
fortran の検索結果 約 7,720,000 件
cobol の検索結果 約 6,530,000 件
c++/cli の検索結果 約 4,680,000 件

781:デフォルトの名無しさん
09/04/07 03:54:22
>>780
ごめんそれ違う。

漏れが言ったのは、グーグルトレンドの方。

782:デフォルトの名無しさん
09/04/07 04:47:38
>>780
発想は面白いよ発想は

783:sage
09/04/07 13:13:32
vb.net の private shared は C# でいうとなんですか?
private partial ? private protected?

784:デフォルトの名無しさん
09/04/07 13:17:51
private static

785:デフォルトの名無しさん
09/04/07 13:19:16
thx!

786:デフォルトの名無しさん
09/04/07 14:11:03
VB.netの存在意義がわからない
初心者向けならジェネリックやLinqの拡張をすべきではないと思うんだが・・・

787:デフォルトの名無しさん
09/04/07 14:12:59
VB.NETはVBプログラマ用の隔離病棟もしくはオブジェクト指向リハビリ施設

788:デフォルトの名無しさん
09/04/07 14:13:04
>>786
それは、貴方の考えた存在意義と違うってだけでしょう。

789:デフォルトの名無しさん
09/04/07 18:15:55
C#>VBってのはC#でオブジェクト指向を勉強した奴がやけに言いたがるようだけど
他から見たらチェイサーとクレスタ


790:デフォルトの名無しさん
09/04/07 18:24:42
そりゃ.NETがベースにあるからだろ

791:デフォルトの名無しさん
09/04/07 18:28:30
.NETのWebBrowserコンポーネントで
RichTextBoxのSelectionColorプロパティみたいに、文字列をドラッグしたときの選択色を変える方法ありませんか?

792:デフォルトの名無しさん
09/04/08 05:02:52
Microsoft Visual C++ Express Edition
このコンパイラで一度「デバッグ無しで開始」でコンパイル成功するとソースを書き換えてもプログラムが変わらないようです
今までは少しソースを書き換えようと思ったら新規作成で新しいソース作ってコピペを繰り返してたんですがいい加減ソースの管理がキツいです
誰か助けてください

793:デフォルトの名無しさん
09/04/08 05:09:03
バイト代は出ますか?

794:デフォルトの名無しさん
09/04/08 05:14:13
>>792
全ては君の勘違い

795:デフォルトの名無しさん
09/04/08 06:02:20
>>792
『Microsoft Visual C# Express Edition』で開発していると仮定しての話だが、(スレタイ読めよ!)
確かにVC++と違って C#の開発のときはアプリの実行ボタンでビルドが更新されないことがあるようだ。
しかし、コンパイルないしビルドボタンを押せば問題ないはず。
デバッグ無しで開始 や デバッグ実行 のボタンとは別にあるぞ。

796:デフォルトの名無しさん
09/04/08 09:47:57
>>792
リビルドしてみた?

797:デフォルトの名無しさん
09/04/08 09:53:21
むしろ自動ビルドしてるならクリーンアップ?で
さもなくばexploreでファイル削除

798:デフォルトの名無しさん
09/04/08 15:22:07
.net のプログラムを C#に書き換えています。
.net におけるshadow(オーバーライドの一種で引数も返り値も変更可能なもの)
はC#だとどういう風にトランスレートすればいいんですかね?

799:デフォルトの名無しさん
09/04/08 15:26:15
.net のプログラムってなに?VB?

800:デフォルトの名無しさん
09/04/08 15:27:01
もちろんC#

801:デフォルトの名無しさん
09/04/08 15:27:15
隠蔽のnew

802:デフォルトの名無しさん
09/04/08 15:30:02
vb.netっす

803:デフォルトの名無しさん
09/04/08 15:32:06
VBではoverridesとshadowが別なのが良くわかんないね。
overridesがほぼC#のnewと同じ。
shadowとまったく同じものはなかったかと。

804:デフォルトの名無しさん
09/04/08 15:35:20
それでは Public Shadow Property X は
public new override X
{get return ...みたいな感じで書けばいいってことですか?

805:デフォルトの名無しさん
09/04/08 15:36:43
ああちがうか、そもそもoverrideとoverridesのちがいがわかってませんでした。
勉強してきます。

806:デフォルトの名無しさん
09/04/08 15:43:35
WebBrowserのDocumentで、mshtmlを経由してiframeの中身にアクセスしようとするとUnauthorizedAccessExceptionになるのですが、
これを回避するにはどうすればいいのでしょうか。

807:デフォルトの名無しさん
09/04/08 18:51:30
public class Bar
inherits Foo
  overrides sub f()
  end sub
  shadows sub g()
  end sub
  overloads sub h()
  end sub
end class
をリフレクションで調べるとこういう違いがあるようだべさ。

public class Bar : Ansi,Auto
    extends public class Foo : Ansi,Auto
        public virtual Void f()
        public Void g()
        public Void h(),HideBySig
        public constructor Void .ctor(),SpecialName

C#の場合全部のメソッドにHideBySigが付いてるんだよね。


808:デフォルトの名無しさん
09/04/08 19:28:38
すみません。馬鹿な質問いいですか?

フォームにラベルがいくつかありまして、それぞれ
lbl001
lbl002
lbl003
という名前になっています。

で引数に001とか002を渡すと通し番号の一致するラベルのテキストを""に変えるメソッドを
作りたいのですが、どうしたら良いのでしょうか?

解りにくい文章ですみませんが、お願いします。



809:808
09/04/08 19:30:47
private void hoge(string number)
{
lbl+number.text="";
}
という感じなのですが・・・

810:デフォルトの名無しさん
09/04/08 19:36:25
public void ClearLabel(string labelName)
 Control control = this.Controls.Find(labelName, false)[0].Text = "";

thisはForm


811:デフォルトの名無しさん
09/04/08 19:39:39
ああ、最初の変数宣言はイラネ

public void ClearLabel(string labelName)
 Control control = this.Controls.Find(labelName, false)[0];
 control.Text = "";

または

public void ClearLabel(string labelName)
 this.Controls.Find(labelName, false)[0].Text = "";


812:デフォルトの名無しさん
09/04/08 19:42:38
public void Func(int number)
{
string name = "lbl" + number.ToString("000");
foreach (FieldInfo info in this.GetFields())
{
if (name == info.Name)
{
Label label = (Label)info.GetValue(this);
label.Text = "";
}
}
}

813:デフォルトの名無しさん
09/04/08 19:43:55
ラベルを配列に入れりゃいいんじゃないの

814:デフォルトの名無しさん
09/04/08 19:46:45
>>808
そういうことをするならラベルをコレクションで管理しとけ
リフレクションを使うのはあくまで応急処置

最初からコレクションで生成してもいいし、どうしてもデザイナを使いたいなら以下のようにする
var labels = new List<Label>();
labels.Add(lbl001);
labels.Add(lbl002);
labels.Add(lbl003);

815:808
09/04/08 19:58:30
みなさまありがとうございました!
>>811
public void ClearLabel(string labelName)
 this.Controls.Find(labelName, false)[0].Text = "";

この場合labelNameは"002"とかでもlbl002を見つけてくれるのでしょうか?

>>812
なるほど。僕でも判る解りやすいコードですね

>>814
おっしゃる通りです。以降気をつけます

816:デフォルトの名無しさん
09/04/08 20:21:07
>>815
見つけてくれないからlabelNameを自分で作成すれ

817:808
09/04/08 21:27:47
>>816
ありがとうございました!

僕はデザイナでしかコントロールを置いたことがないので
名前の重複がありうるなんて知りませんでした。

なので名前のわかっているコントロールを探すなんてナンセンスな感じを
うけましたが、自分が無知だっただけでした!

818:デフォルトの名無しさん
09/04/08 21:49:25
何も解かってないことが解かった

819:デフォルトの名無しさん
09/04/08 21:54:33
>>817が何を言ってるのかまるでわからない・・・

820:デフォルトの名無しさん
09/04/08 21:56:19
なんとなく理解できる俺もほ乳類を名乗って問題無いのか・・・

821:デフォルトの名無しさん
09/04/08 23:41:34
>819
多分Nameプロパティとフィールド参照名をごっちゃにしてるんだろ。
>817
参照名はスコープ内で重複しないけど、コントロールごとに設定できるNameプロパティの値は重複可能。
デザイナーは勝手に「Name = 参照名」に設定してるから一意に見えるだけ。自前でNameを設定してなければ、
int num = 2;
Label label = this.Controls[ "lbl" + num.ToString("000")] as Label;
if( label != null ) { 処理 } else { エラー処理とか }
自前のコードでNameを設定してて同じNameの奴が重複してたら、最初に追加されたやつ(普通はデザイナーが作った方)が返ってくる。
どうしてもフィールド名のほうでアクセスする必要がある場合は、>812みたいにリフレクションを使う。
でもクラス内で完結することに使うことはまずない。

822:デフォルトの名無しさん
09/04/09 00:09:57
Regexクラスを使った正規表現って
交差演算子「&&」は使えませんよね?

823:デフォルトの名無しさん
09/04/09 00:12:33
古語でも可也

824:デフォルトの名無しさん
09/04/09 00:18:44
>>822
MSDN読め。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5270日前に更新/200 KB
担当:undef