ふらっと C#,C♯,C#(初心者用) Part130 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part129
http://mevius.2ch.net/test/read.cgi/tech/1497000961/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured クラスと構造体をひっくるめた総称がオブジェクト
オブジェクトを実体化した物がインスタンス 凄い!短時間でこれだけ回答をいただきありがとうございます。
オブジェクトは設計図とか概念って考えた方がいいんでしょうか?
となるとさっきの敵クラスを継承したスライムクラスはオブジェクトというよりインスタンス? C#では単体で概念的なオブジェクトの話はほとんど出てこない
大体object型というすべてのクラスの元になる型の話 オブジェクトって単語は使わないほうがC#を理解し易いと思う >敵クラスを継承したスライムクラスはオブジェクトというよりインスタンス?
class 派生クラス : 基底クラス{} // これはオブジェクト(クラス)
派生クラス 変数名 = new 派生クラス // これがインスタンス 敵 (クラス)
↓継承
スライム (クラス)
↓インスタンス化
スライムA,スライムB,スライムC (インスタンス) 今は気にしなくてもいいけど
C#での話と一般的なオブジェクト指向とでは話がまた違う
C#のクラスも構造体も一般的なオブジェクト指向じゃクラスでひとくくり 敵クラスもスライムも攻撃パターンもオブジェクトとして考えるみたいな感じがオブジェクト指向ですよね?(ざっくり)
c#はオブジェクト指向に基づいて作られているけど、オブジェクトという概念自体はあまり考えずともプログラムは組める、という考えでいいのでしょうか? >攻撃パターン
そこはメンバ関数じゃないかな
>オブジェクトという概念自体はあまり考えずともプログラムは組める、という考えでいいのでしょうか?
それでいいよ
正しいオブジェクト指向とは〜とか覚えなくていい 学者や思想家になるんでもなければ
覚えるべきなのは、C#での適切なコーディング つか、C#ってマルチパラダイム言語なので
純粋で完全なオブジェクト指向を適用しようとすると、かえって面倒な事になりかねないしな ある本によると、
クラスを実体化したものをオブジェクトといい、実体化することをインスタンス化する、またはオブジェクトを生成する、などといいます。クラスはオブジェクトになってから初めて利用できるのです。
と書かれているのですが、実際にはクラスもオブジェクト指向で考えるとオブジェクトの一つだけれど、そこまで考えるとややこしいから無視してていいよ、って感じですかね? つまり
敵クラス(雛形クラス)
HP(変数)
攻撃力(変数)
HPがある数値を下回ると逃げる(関数)
スライムクラス(継承クラス)
HP 5 (メンバ変数)
攻撃力 3(メンバ変数)
HPが2以下になると逃げる(メンバ関数)
インスタンス化
スライムA、スライムB、スライムC・・・
でも言ってしまえば、これら全てオブジェクト。
という理解でよろしいでしょうか? >>96
インスタンス化したもの(メモリに割り当てられた)がそう。
君がいうようにスライムA,スライムB…がオブジェクトでおk またオレオレ定義でグダグダになっとる w
イメージなら>>83がまあまともだと思うわ オブジェクトって言葉はふわふわしがちな印象だから
実際のプログラム言語ベースで考える場合とかは使わないほうが安全
C#ならクラス(構造体含む)とインスタンスで事足りる C#(VB.NET)の継承は、なんちゃってだからなぁ ぶっちゃけ
継承とかして実装するから
可読性が悪くなって保守コストがかかる事分からんのかねぇ リアルタイムゲームはすべてのパラメータをリアルタイムでエクセルで閲覧できるような構造で作らないとデバッグ間に合わない
縦軸インスタンス、横軸パラメータで
バグったら前後のデータを自動出力
オブジェクト指向(ツリー構造的な意味で)は合わないと思う >>96
オブジェクトとは何か、みたいな哲学的疑問(笑)が気になるのは
よく分かるけど、そういうのは後回しで十分だし後回しにした方がいいと思うよw
たぶん、不毛なだけw
初心者は具体的なコード例を見て、どういうコードがどう機能するか、
何が実現できるのか、そういうところに集中した方がいいと思う >>98
いやこういう例え方って初心者にとっては一番ふわふわしてて分からないと思うんだけど >>104
そう?
たいていの人は設計図とか家自体はイメージできるしそのイメージとそんなに解離してないと思うけどな オブジェクトはともかく、インスタンスなんて変な例えや哲学的な話じゃなくて、
もっと現実のコード寄りに「newすると作られて使えるようになる何か」
ぐらいにに理解した方がいいよw
しつこいけど、初心者にとって重要なのは「インスタンスって何?」みたいな意味論じゃなくて
インスタンスを作るコードをどう書くか、どう記述したらインスタンスのメンバーにアクセスできるか、
っていう機能主義的な具体論 new = メモリ確保して初期化する
でいいんだよ
くだらねえ例え話はいらん >>107
それは強く同意だな
俺としてはオブジェクトとかインスタンスとかの言葉すら知らなくていいとも思ってる
newしたらなんか動いた!すげー!
くらいの軽い感覚が理想 みなさんありがとうございます。>>96です。
皆さんがおっしゃるように、とにかくオブジェクトが云々と考えるより構文をたくさん打って感覚で覚えていくのが一番の近道なのかもしれません。
でも皆さんの話を聞いて少し頭の中が晴れてきました。
ありがとうございました。 オブジェクト指向って本来はモジュール設計のベストプラクティスに現実世界のアナロジーをこじつけたものだから、
高尚な理論なんか無視して単なるモジュール化の一手法として導入すべきなんだよな
C言語を使っていれば自然とlist_add(&list, item)のようなパターンに行き着いて、
そこからのオブジェクト指向への発展はきわめて自然なもの >>95
とりあえずその本のタイトルと筆者をさらせ
オブジェクト指向ってのもいくつかの流派があるから、一概には言えないが
C#ベースで説明してるならその本は焼き捨てた方が良い >>83,98
その例えならクラスは何よ?
その答え見ないとまともかどうかは何とも言えん
それがC#での一般的な用法になじむかどうかは別だがな >>112
誰に向かって何を威張ってるのか知らんけど、>>95にあるような記述は
初心者向けのざっくりとした説明としてはまあ妥当なもの。
最初から重箱の隅つつく勢いで厳密に矛盾がないように書いたら初心者は理解できないよ。
ばっかじゃないの classって、共通の性質や特徴を有するものの分類とかいう意味みたい。
オブジェクト指向の言語は、大体がobjectを基本として、そこから色んな性質に分けていったものをクラスにして「名前をつけて」あげる。
オブジェクト指向でいうクラスは「分類整理のやり方、結果」と言えるんじゃないかな。
動物とか車とかに例えたりする説明の仕方もありだと思う。けど、分類整理のやり方という文脈がないと、継承とか派生、つまり上下・並列の概念が分かりにくくなったりしないかな。
いま目の前にライオンが2匹いたとして、同じライオンとして分類していいのか、タテガミの長さが分類のポイントなのかとか、片方は外敵から身を守るために火を噴くとか。ペンギンと比べてどの程度同じ分類が出来て、どの程度違いがあるのかとか。
まとめると、モノでも生き物でも何かしらの特徴とか性質を持っていて、特徴で分けたのがクラス。
オブジェクト指向とは指向、言い換えると、方向性としてはモノを「最小の単位」として扱うことを表している。元素や光といった、もっと根本的な最小になる要素もあるけど、そのレベルで扱おうとすると色々細かすぎたり、人が理解しにくいから。
かな?俺もよく分からなくなってきた。
個人的には日本に来るとき訳する際に、継承とかいう普段使い慣れない概念語じゃなく、「環境適応」とか「マイナーチェンジ」とかがよかったのかなと勝手に思ってる。 >>117
後半に行くに連れて、段々変になっていってるぞ
最も重要な点は、
「データ(プロパティ)」と「振る舞い(メソッド)」を1つにパッケージする事だろう
一々現実世界の物体に例えて説明する必要は無い stackoverflowでも回答者によってマチマチだし
考えたら負けな気がしてきた >>118
データと振る舞い、そこが理解できたらパッと先が開ける感あるんだけど、灯台元暗し的に回り道しちゃうよね。
質問者の人には、その疑問は忘れず、さりとて目の前の事をこなしてみて、たまーにまた疑問に立ち返って欲しいなあ。試行錯誤してるある瞬間に、パッと思い出してすんなり受け入れられる時が来ると思う。
オブジェクト指向だとかなんだとか、結局はどっかのオッチャンインスタンスが考えたものだろうし、完全な答えはないんだろうなぁ。 厳密な定義も元からないし実装によって変わるし
そもそもクラスベースじゃないものまである
設計段階と実装段階でも別のことがある
ひとくくりに語るのは難しい
でも意思の疎通はかなりできてしまうという曲者 哲学的な話は初心者には意味ないって自分で書いておいてあれだけど、
あえてそういう話をすれば、オブジェクトっていうのは「〜であるかのように振舞う仮想機械」
だと考えるのが一番いいと思うよ。
従来の構造体+関数より分かりやすく仮想機械を記述するための仕組みがクラス。
仮想機械の組み合わせでプログラムを作りましょう、っていうのが(もっとも素朴な)オブジェクト指向 >>113
あれは「オブジェクトとインスタンスの関係性」をハイパーざっくり示すだけでほかに流用できるほど高尚な例えじゃないよ
ごめんね >>117
> classって、共通の性質や特徴を有するものの分類とかいう意味みたい。
IT系(に限らんのかも知らんが)の用語は結構元の意味と違う使い方されてるから気を付けた方がいいよ
例えばネットワークカードでパケットキャプチャするためにPromiscuousモードって言うのがあるんだがあるときふとどういう意味だろう?って辞書引いて笑たし
https://dictionary.goo.ne.jp/ej/67118/meaning/m0u/ 引っ越して来ました。
いろいろ、よろしくお願いします。 ┌(_Д_┌ )┐ 皆さん、float、double、intの使い分けはどうされてますか?例えばドラクエのようなRPGでせいぜい4桁程度の整数しか使わない場合でしたら、intを使っておけば間違いはありませんか? 初心者として記載
基本的にintでも良いと思う。けど、 true(1) false(0)で詳細分けする時に便利
http://ideone.com/7joXzQ bool a = true;
bool b = false;
bool c = null; // error CS0037: Null 非許容の値型であるため、Null を 'bool' に変換できません
bool d = 0; // error CS0029: 型 'int' を 'bool' に暗黙的に変換できません >>127
普通に整数が使いたければint
アニメーションなどで込み入った計算をするときは無理に整数でやるよりdoubleの方が職人芸がいらなくて楽floatは精度の低さが問題になりやすいから描画などの最終的な出力以外には使わない方がいい >>127
とりあえず、整数ならint、小数点以下が必要ならdoubleを使っておけば良い。
floatを使うメリットはあまり無い。 情報落ちを起こしてるんじゃないか?
浮動小数点数は大量の値を前から順に加算したりしたらダメだよ >>136
誤差を累積させるような演算をしてるからだろうねえ。
誤差の性質を理解して累積しないようなコードを書かなきゃだめでしょう 要求される精度にもよる
double /frortは2進数表現だから表現できない小数がある
dicimal は10進数表現 >>139
デジャビューだけど、こういう寝言を書く人は誤差の問題の初歩の初歩も理解してない double/frort(笑)の表現が2進数だからdicimal(笑)と違って誤差が…みたいな話をする奴は本質を理解してないよな
実数型は常に連続な近似値として扱うべきで、最終的には要求される精度に応じて必ず丸めて使うんだよ
decimalとは扱う問題の性質が違う 任意の範囲(C#に組み込まれてないようなのも含めて)の整数型を総称してintegerと呼ぶなら
double/frortはinteger / 2^integerでdicimalはinteger / 10^integerなのじゃ 誰かに突っ込まれるまでボケ続けるつもりかなw
frortってどういう発音なんだろw frortはfrort型だろ
読み方はfrortって読むんだ >>116みたいな人もおるんやし
ちょまどさんもそろそろ本書いてみたらどないやろ?
真奈たその後釜じゅうぶん狙えるんちゃう? >>134
そういのがいるからC♯たんが馬鹿言語扱いされちゃう >>157
intっぽい型を自動判別
string,double,date,boolの値が入ってきたらアウト
decimal,char,int,byteはセーフ でもさ、ソモソモなんで型分けてるかと言うと
消費する容量が違うからじゃないの?
バリアント型って結構デカイとかないの?
例えばbyteで済むならbyteの方がよくね? >>161
違うよ
型ってのはあくまで気分なんだよ
厳密に定義したらわかりやすいし
でも厳密にし過ぎると使いにくい
マシンみたいなPGにはこんなもん必要ない
メモリ上にはアドレスと実際の値
それしかない
そこになんのデータを入れてるかなんて知ったこっちゃない >>163
まあ、c言語とかアセンブラやんないとわかんないと思う 気分だな。unionとか使い出すともう本当どう扱いたいかの気分でしかない。
浮動小数点と巨大整数と、それらのテンソルの型作ったことあるけど、SIMD的な命令として流し込むためにバラバラにしたりしやすいように都合よく書いてた覚えがある。 >>161
C#に限った話なら
byteはSystem.Byte構造体のエイリアスだし、
intはSystem.Int構造体のエイリアスだから
当然、消費するメモリ容量に差は出るが
大昔ならいざ知らず、現代のマシン環境において
そこまでメモリ容量を切り詰めて考えなきゃならん場面なんざ、そうそうねえよ
メモリを節約したきゃ、変数のスコープや生存期間を見直した方がいい 型を厳密にしたいかどうかだな
仕事で設計書書いて実装してるときは
varとか邪魔だし CLRの型はVMレベルで実装されていて、気分で扱えるのはbittableな値型だけだよ
それ以外はメタデータを含んでてアホなことするとAccessViolationException C#はどこもかしこもvar推奨だぞ
数値計算以外はvarでええやろ 今まで型厳密に書いてたけど、var推奨だったのか・・・ >>169
さすがにvar推奨は見たことないな
禁止は結構見る 右辺を見て明確な場合はな
全体を見渡す力のない俺は使うとしてもローカル変数までにしとかなきゃ死ぬ >>172
var unk = GetUnko();
の型を追跡するの面倒じゃね? 印刷はあんまりしないけどブロックで取り出したときにIDEが無いと読めないんだよね パッと見で型が明確な場合は、varで問題無いと思ってる
varで訳が分からなくなるなら、メソッドを肥大化させ過ぎという意見も理解は出来る
しかし、それはそれとして
型名をきちんと書くのが手癖として身に付いてしまってるのだ >>174
GetUnko()がUnko型を返さないのならそれは命名がおかしくね? >>177
インターフェースってそういうもんだってさ 型が目に見えたら何かメリットあるの?
全ての型のAPIと振る舞いを覚えてるならともかく普通覚えてないよね
public UnkoNagashi() {
Unko unko = unkodb.GetUnko();
unko.Nagasu();
unkodb.SaveUnko(unko);
}
というコードをみてなるほどunkoはUnko型なのかとわかる
でもUnko型がNagasu()以外に何をできるかは僕は知らない
そしてこの文脈ではNagasu()以外の振る舞いを知る必要もない
だったらそれって型名を書く意味あるの?
unkoがNagasu()できる事だけ知ってればいいよね
それはコードがコンパイルできる事から自明でしょ ここ初心者の質問スレなんだよ
質問でなく議論したいなら
ふらっと C#,C♯,C#(議論用)
http://mevius.2ch.net/test/read.cgi/tech/1469538912/
でやれよ >>174
デジャブかな?
もう何回みたことか。。つーか毎回言われてると思うけどカーソルあてるのそんな面倒か? ■ このスレッドは過去ログ倉庫に格納されています