C#, C♯, C#相談室 P ..
[2ch|▼Menu]
391:デフォルトの名無しさん
16/08/28 00:15:50.55 zGC1w6Ia.net
>>365
だからそう言ってるでしょ。

392:デフォルトの名無しさん
16/08/28 00:17:10.42 +mkoP4gZ.net
>>375
それはオブジェクト指向がその意味でのシンタックスシュガーでしかないよ。
class構文が無かったCでも関数ポインタ+構造体で同じ事が出来たわけだし。
重要なのは拡張メソッドにthisが渡っていることだよ。
静的メソッド(クラスメソッド)にはthis使えないでしょ。
今回の例で言えば、宣言部分は以下になるということ。
ただしコンパイルが通るかどうかは知らんが。
通らないのなら君の言うとおり、通るのなら俺の言い分が正しいことになる。
public static void Draw(this Rectangle rect)
public static void Draw(this Circle circle)

393:デフォルトの名無しさん
16/08/28 00:19:39.62 UJTSRlJK.net
何で拡張メソッドってstaticクラスじゃないと定義出来ないんだ?
何か理由あるの?
別に制限はstaticメソッドだけでいいと思うけど
例えばString.IsNullOrEmpty(String)
もしstaticクラス以外に拡張メソッド定義出来たら
String.IsNullOrEmpty(this String)
みたいになって更に便利になると思うのに

394:デフォルトの名無しさん
16/08/28 00:21:24.05 hQF+q+Zk.net
そこのthisは単に拡張メソッドのマーク
通常のthisとは違う意味
拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
RectangleやCircleにキャストすることになる
そこで登場するのがパターンマッチングと

395:デフォルトの名無しさん
16/08/28 00:26:26.11 UJTSRlJK.net
今更変えるのは互換性的な問題で難しいだろうけど、
==演算子を等価演算子
===演算子を等値or不変インスタンスかつ等価演算子
にするべきだと思った
不変かは属性とかで定義して
Equalsメソッドとかいらねーだろ
==演算子と両方定義しろとかどうなってんだ

396:デフォルトの名無しさん
16/08/28 00:31:26.64 +mkoP4gZ.net
>>379
いや拡張メソッド内で自分自身のメンバを参照出来るよ。多分。
> 実際に、拡張メソッドは、それらが拡張している型のプライベート変数にはアクセスできません。
> URLリンク(msdn.microsoft.com)
普通に考えれば、わざわざプライベートは駄目って書いてある時点でpublicならいけるって事でしょ。
要するに外面的には Draw(circle) でしかないところを circle.Draw() と書けるだけでしかない。
その辻褄はコンパイラが合わせるけど、privateをpublicには出来ないのでこれは無理。
MSDNの説明には矛盾を感じないけど。

397:デフォルトの名無しさん
16/08/28 00:36:48.79 +mkoP4gZ.net
>>379
> 拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
バインディングはコンパイル時だし、多分普通に呼べると思うよ。
というか呼べないと拡張にならないから、文法が違ったとしても何らかの呼び方は必ずあるはず。

398:デフォルトの名無しさん
16/08/28 00:37:11.60 zGC1w6Ia.net
>>380
EquqlsというかIEquatableが不要とは思わないけど、
VBと同じように参照等価検査専用の演算子を用意して、==はオーバーロードしないと
使えないようにしてくれた方が分かりやすかったね。

399:デフォルトの名無しさん
16/08/28 00:43:30.59 hQF+q+Zk.net
>>379
RectangleとCircleにDraw拡張メソッドが定義されているなら以下のようになる
void hoge( Shape shape )
{
//できない
//shape.Draw();
if(shape is Rectangle)((Rectangle)shape).Draw();
else if(shape is Circle)((Circle)shape).Draw();
}
拡張メソッドを呼び出すときにキャスト必須
「Shapeを継承したクラスはすべてDraw拡張メソッドを定義しなければならない」
という条件はかなり強引で、ヘタすればCLRや共通言語仕様にも手を入れなければいけない問題になる

400:デフォルトの名無しさん
16/08/28 00:45:09.67 s1SxoEZK.net
>>378
スコープが広がってルールが複雑になるから
例えばこういうときどうする?
/* ファイル1.cs */
namespace NS1 { class Hoge { public static void EX(this Hoge h) { … } }
/* ファイル2.cs */
namespace NS2 { class Test { public static void Main() { new NS1.Hoge().EX(); } } }
これ、現在の仕様から類推すればファイル2内ではNS1をusingしてないから
EXは拡張メソッドとして呼び出せないはずだけど、直感的には呼べた方が自然だと思わない?
それとか、拡張メソッドを含むクラスを別の名前空間のクラスが継承したらどうする?

401:デフォルトの名無しさん
16/08/28 00:59:15.28 hQF+q+Zk.net
>>382
拡張メソッドはコンパイラで解決しなきゃいけない
しかし、外部のDLLがShapeの子クラスを実装して、それを動的に読み込む可能性があるのでコンパイラでは解決不能
>オブジェクト指向がその意味でのシンタックスシュガーでしかないよ
そういうことを言ってるんじゃない
オブジェクト指向は共通言語仕様に書かれているのでILにその情報が残り、すべての言語が対応する
それに対しシンタックスシュガーはコンパイラの機能でILに完全には残らなかったり、属性をつけることで対応しているコンパイラのみが利用する

402:デフォルトの名無しさん
16/08/28 01:12:12.64 +mkoP4gZ.net
>>386
コンパイラ云々は俺は普通に出来ると思っているのだが、まあそれは置いておこう。
>>384
こちらを先にやろう。
> //できない
> //shape.Draw();
これって出来ないんだっけ?というかこちらは最近はJavaScript(型無し)でやっていて、
void hoge(var shape ) // var なので何でも入る
{
shape.Draw(); // 勝手に直近のvirtualが呼ばれる。
}
で普通にオーバーライドされたvirtualが呼べる(circle.drawなりrectangle.drawなり)から、
実際のC#での記述の仕方は知らない。
ただ、アップキャストしたらもう仮想関数は呼べません、ダウンキャストしてからにしてください、
だとOOPとしてはかなり無理があるから、自然なやり方がないわけ無いと思うけど。
だってその is 構文ってのも新しいんでしょ?
だったらそれがなかったこれまではOOPできませんでしたーってことになっちゃうじゃん。

403:デフォルトの名無しさん
16/08/28 01:32:13.31 hcj7YQtW.net
しつけえなあ
入門書ぐらい読んでからにしろよ
なんでど素人がそんな自信満々なんだよ

404:デフォルトの名無しさん
16/08/28 01:33:21.98 +mkoP4gZ.net
>>384
以下見る限り、virtual付けたら普通にOOPできるとしか読めないが。
てか当たり前だが。
引き数渡ししたら出来なくなるって事もないと思うけど。
> しかし、動的な型に基づいて呼び出されるメソッドを決定したい場合があります。
> (というより、ほとんどの場合、メソッド呼び出しは動的に決定した方が都合がいい。)
> 動的な型に基づいて呼び出されるメソッドを選びたい場合、
> 以下のように、 メソッドに virtual という修飾子を付けます。
> URLリンク(ufcpp.net)
その上にvirtual付けなかった場合も書いてあるから見比べれば分かると思うよ。

405:デフォルトの名無しさん
16/08/28 01:37:09.54 +mkoP4gZ.net
>>388
まあその通りだ。今は最新環境がないので試せない。
確かにこれ以上やっても意味無いので、後日最新環境で試せば良いだけだね。
「拡張メソッド」ってのに俺が夢を見すぎているのかもしれんし。

406:デフォルトの名無しさん
16/08/28 02:08:02.18 hQF+q+Zk.net
>>389
何度も行っているように、拡張メソッドではオーバーライドできない。
なぜなら拡張メソッドはただのC#限定のstaticメソッドのシンタックスシュガーに過ぎないから。
そのURLではどこにも拡張メソッドのことは書いてないでしょ
class Triangle : Shape{}
ってプラグインみたいに外部のDLLで宣言されて、それを動的に読み込んで、hogeに渡ってきたらどうするの?
外部のDLLのことなんてコンパイルの地点では知らないので存在しない拡張メソッドを呼べるはずがない。
夢を見すぎているんじゃなくて、ただ無知でC#とかCLIをよく理解してないだけだと思う
javascriptで言うならprototypeの存在も知らないでjavascriptはウンタラカンタラ言っている状態なので、基礎から学び直したほうがいい

407:デフォルトの名無しさん
16/08/28 08:45:51.40 UJTSRlJK.net
>>385
そういう事か…確かに面倒だな
それならnull可メソッド的な物を作ればいいんじゃない
public null void Hoge(){
  //thisがnullの可能性あり
}

408:デフォルトの名無しさん
16/08/28 09:58:20.62 +mkoP4gZ.net
>>391
試したぞ。VS


409:Community2015はサインインしないと使えなかったから、VS2008EEだが。 その範囲では確かに出来なかった。コードは以下ページを参考に改変した。 > http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=cs002_ExtensionMethods しかし理由は拡張メソッドがstaticだからだよ。以下コードで、 class SampleClass1 {} class SubClass : SampleClass1 {} static class hoo { static public void SampleExtensionMethod1(this SampleClass1 sampleClass1) { Console.WriteLine("super_ex"); } static public void SampleExtensionMethod2(this SampleClass1 sampleClass1) { Console.WriteLine("super_ex2"); } static public void SampleExtensionMethod1(this SubClass subClass) { Console.WriteLine("sub_ex"); } } static void test(SampleClass1 sampleClass1) { sampleClass1.SampleExtensionMethod1(); // (A) sampleClass1.SampleMethod1(); // (B) } static void test3(SubClass subClass) { subClass.SampleExtensionMethod2(); .// (C) }



410:デフォルトの名無しさん
16/08/28 09:59:05.95 +mkoP4gZ.net
(B)は通常メソッドで、SubClassが与えられると当然SubClassのメソッドが呼ばれる。
ただし(A)は常にSampleClass1(親クラスというより「そこに記述された」クラス)の拡張メソッドが呼ばれる。
なお(C)はSampleClass1の拡張メソッドが呼ばれる。
(つまり子→親に関しては辿れる)
(B)が動作する以上、thisポインタは正しく渡っている。
あとは拡張メソッド側に継承関係を明記し、実行時型でこれを解決すれば良いだけなのだけど、
C#はどうやら文法的にこれを禁止している。(技術的には全く問題なく出来るはず)
今回出来ないのは、拡張メソッドがstaticだからコンパイル時にそこにリンクされるからだ。
そこでvirtual指定してみたが、これはSyntacErrorで落ちる。
どうやらそれ以前にC#は静的クラスは継承禁止で、当然virtualには出来ない。
しかしそもそも静的クラスが継承出来ないのが問題だ。
何故これを禁止しなければならないのかは分からない。
結局>>378の「static縛り」或いは上記「staticクラスは継承出来ない」のが問題。
とはいえこの仕様では「拡張メソッド」がイマイチなのはC#開発側も認識出来るだろうから、
何らかの理由があってこの仕様なのだとは思うが。
したがって>>364の指摘どおり、
> >>329で多態が必要なのに>>352は拡張メソッドでいいというのは矛盾してるよ。
これは間違いだった。拡張メソッドが多態出来ないのは知らなかったから。
となると>>352
・Shapeクラスにメソッド追加---(α)
・GUI側でShapeクラスを継承したクラスを作って対応---(β)
>>384方式で is XXXX 形式で全部書く---(γ)
のどれかになるが、俺ならαかβであって、γはないね。

411:デフォルトの名無しさん
16/08/28 10:08:01.32 acJIbkh4.net
スクリプトコーダーらしいパフォーマンス無視の考え嫌いじゃないよ

412:デフォルトの名無しさん
16/08/28 10:18:04.05 +mkoP4gZ.net
釣りか?
仮想関数とif/switch分岐でのコストはC++の連中が死ぬほど議論しているが、
結論はどっちもほぼ同じだよ。
だからαもβもγも動作速度は大して変わらないはずだけど。
しかしそもそもC#ってパフォーマンス重視出来る言語じゃないよね。

413:デフォルトの名無しさん
16/08/28 10:21:51.48 acJIbkh4.net
>>396
そこじゃない

414:デフォルトの名無しさん
16/08/28 10:24:49.86 +mkoP4gZ.net
じゃあどこだよ?
てかチャットじゃねーんだから意見があるのなら分かるように書けよ

415:デフォルトの名無しさん
16/08/28 10:26:20.15 acJIbkh4.net
>>398
それ君が言うんだ?

416:デフォルトの名無しさん
16/08/28 10:32:20.35 1sBWhH04.net
>>396
>C#ってパフォーマンス重視出来る言語じゃないよね
これ免罪符に糞コード生み出す奴多いから困る

417:デフォルトの名無しさん
16/08/28 10:34:33.21 acJIbkh4.net
入門書も読まないスクリプトコーダーはdynamicでも使ってろってこった

418:デフォルトの名無しさん
16/08/28 11:04:12.58 h1JFz9az.net
ウザイから質問者と回答者以外が3行以上書いたら死刑な

419:デフォルトの名無しさん
16/08/28 12:58:05.84 0rJ/vUpY.net
ひょっとして結局拡張メソッドからは型の外のスコープからアクセスできるメンバーにしか
アクセスできない、っていう糞当たり前の話を延々やってだけなの?
そんなのちょっと我慢して拡張メソッドの解説記事を5分も読んだら猿でも分かる話だろw

420:デフォルトの名無しさん
16/08/28 13:59:05.59 ZfPDxmLp.net
フロントエンドコーダーってろくな人材いないよな

421:デフォルトの名無しさん
16/08/28 14:35:00.94 hQF+q+Zk.net
>>394
実行時に解決するのは非常にコストが高い。
多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
>そもそもC#ってパフォーマンス重視出来る言語じゃないよね。
大きな勘違い。Roslynとかではパフォーマンスをかなり重視してる。
実行時はネイティブコードになるので書き方によってはC++と同等の速度が出る。
(ただし、C++は危険な操作を行ったりできるのでその分有利)
>staticクラスは継承出来ない
なぜなら、staticクラスは「インスタンス化、継承できない」という指定付きのクラスだから。なぜintは数値しか表せないのかみたいな意味不明な主張
>・Shapeクラスにメソッド追加---(α)
Shapeクラスが汎用的に使ったり、ライブラリとして公開するクラスならどうしようもない
WPF、WinForms、Xamarinなど、プラットフォームによって描画方法は全然異なるのでDrawメソッドを決められない
>・GUI側でShapeクラスを継承したクラスを作って対応---(β)
手間が掛かり過ぎるし、構造体やsealedクラスなら継承はできない。
クラス内にフィールドで保持してもいいが、Int32WrapperとかStringWrapper、加えて列挙体や関数、タプルなんかのラッパークラスができて複雑に。
状況によってはInt32WrapperWrapperみたいなものも爆誕

422:デフォルトの名無しさん
16/08/28 14:43:51.29 hQF+q+Zk.net
普通にココらへんのリンクで十分か
URLリンク(www.buildinsider.net)

>GUI側でShapeクラスを継承したクラスを作って対応
これは構文解析ライブラリは継承前のクラスを返してくるわけだから、無理があった

423:デフォルトの名無しさん
16/08/28 14:55:35.63 14dFRx50.net
拡張メソッドで話がだいぶ逸れたけどなに話してたんだっけ

424:デフォルトの名無しさん
16/08/28 14:56:21.93 QOlzH7cc.net
できない君か

425:デフォルトの名無しさん
16/08/28 15:27:24.87 +mkoP4gZ.net
>>405
先に了解事項を書いておく。
> >staticクラスは継承出来ない
> なぜなら、それが定義だから(意訳)
これは了解。こちらも調べている限り、どうやらそのようだと分かった。
staticクラスはシングルトンの糖衣かと思っていたが、わざわざ別物を用意しているね。
> 静的クラスはシールされるため、継承できません。
> URLリンク(msdn.microsoft.com)
> staticクラスとSingletonでは以下の違いがあります。
> URLリンク(takachan.hatenablog.com)
したがって、疑問は何故staticクラスにしか拡張メソッドを置けないか、になり、
つまり>>378と同じで、そちらの見解は>>385というのもいい。
ただ俺はこの回答に納得しているわけではないが、
結局これはどこまでやるかということだから。

426:デフォルトの名無しさん
16/08/28 15:30:05.25 +mkoP4gZ.net
次に今回の実装方式について、
(α)についてはその通り。
(β)については「継承」が出来ればそっちの方がいいが、無理なら「内包」でも問題ない。(β+)
コンストラクタでShapeを与えて内包したRectangleDraw、CircleDrawクラスを作り、
ShapeDrawクラスを継承する。
つまりラッパーオブジェクトを作成して同階層構成でXXXXDrawクラスを構成する。
これだと自前クラスなので何も問題なくOOPできるが、
コンストラクタ内では1回だけ is XXXX でswitchしなければならない。
それでも毎回記述が必要な(γ)よりマシ。
> クラス内にフィールドで保持してもいいが
後の文を読む限りこれはばらしてということだと思うが、
(β+)はばらさすにそのまま保持する。(フィールドとして Shape shapeを持つ)
そして各Drawメソッドからは this.shape.xxxxとしてアクセスする。
こうすれば、アクセサに関してもShapeの定義そのままであり、追加記述は必要ない。
これにより、外枠以外の本質的記述が(γ)に対して増えることはない。
これでどうだ?

最後に以下だが、
> 実行時に解決するのは非常にコストが高い。
> 多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
> また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
これはいろいろだいぶ違う気がするが、確認も時間がかかるし、後回しでいい。

427:デフォルトの名無しさん
16/08/28 15:40:18.87 xWdxGs/J.net
パターンマッチング推進派の巧妙なアンチ書き込みか!

428:デフォルトの名無しさん
16/08/28 15:50:02.41 +mkoP4gZ.net
>>406
リンク先読んだ。筆者の考え方とは同意する。
結果、俺は以下に該当するのでオブジェクト側に突っ込みたいと考える。
> 型だけを見た単純な分岐しかしない場合、
> 仮想関数を使う方が実行性能面でも保守しやすさの面でもいいだろう。
そちらは以下に該当すると考えてパターンマッチングというのも了解だ。
> 1つは、型の外に実装を書く方が好ましい場合だ。(中略)
> 特定の種類のアプリでしか使わないような機能を書く場所としては (型は)【追補】
> 不適切となる。

429:デフォルトの名無しさん
16/08/28 16:06:33.60 +mkoP4gZ.net
>>405
ちなみに以下について俺の疑問点を先に挙げておく。
> 実行時に解決するのは非常にコストが高い。
> 多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
> また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
・静的メソッドはvtableに置く必要はないが、普通はそこに置いているはず。
それが一番簡単だし。
(クラス自体がstaticではないのでコンパイル時にリンクは無理)
したがって、virtualメソッドとstaticメソッドの実行速度差は無いはず。
・呼び出しに失敗って何?C#ならコンパイルが通っている限りあり得ないと思うが。
(C++みたいな<reinterpret_cast>とかは無しで)
・実行時に解決って言ったって、vtableの場合は解決済みのthisポインタを持っているわけであって、
何かを比較したりすることはない。間接呼び出しになるだけ。
コストはゼロではないが、リフレクションとかとは全く違う。
URL付きのツッコミは歓迎。

430:デフォルトの名無しさん
16/08/28 16:30:05.10 +mkoP4gZ.net
追記
俺の間違いが分かったので書いとく。
× > ・静的メソッドはvtableに置く必要はないが、普通はそこに置いているはず。(>>413)
○ 置いてない。静的メソッドは直接呼び出し。
× > したがって、virtualメソッドとstaticメソッドの実行速度差は無いはず。
○ 直接呼び出しする非virtualの方がvirtualよりは速い。
  staticメソッドには言及されていないが、多分非virtualと同じ。
> メンバ関数
> URLリンク(www.microsoft.com)

他の下2件はどこを調べればいいか分からないのでツッコミ待ち。
よろしく。

431:デフォルトの名無しさん
16/08/28 18:36:26.78 hQF+q+Zk.net
>>410
>1回だけ is XXXX でswitchしなければならない
その時にパターンマッチング使えば楽だよねって話でしょ
毎回使うかどうかは好みや書き方次第かと
>呼び出しに失敗
拡張メソッドの実装を理解してる?
ExtensionAttributeを静的クラスに付与して、コンパイルの時にそれを見てるだけ。
URLリンク(msdn.microsoft.com)
継承関係とは違って共通言語仕様に定められていない(はず)なので、全言語が対応していない
例えばShapeクラスとかをライブラリとして公開したとすると、他の言語がShapeクラスを継承した時に必ず拡張メソッドを書いてくれることは保証できない
そうすると、存在しないメソッドは呼び出せないので失敗することになる
何なら、動的に新しい型自体を作成してメソッドに渡すことすらできる。
>実行時に解決
拡張メソッドはそもそもサポートしてない言語もあるし、全く独立したクラスなのでそもそも動的に解決するのが困難
やろうとすればたぶん共通言語仕様とかの変更が必要で影響ばかりでかくて利点が皆無

432:デフォルトの名無しさん
16/08/28 19:17:00.51 +mkoP4gZ.net
>>415
いや>>352に対する君の主張は「毎回べた書き」だろ。すり替えるなよ。
それはさておき、通常はクエリメソッドを用意しておいてそれで対応だ。
例えば Shape.type で 'rectangle' や 'circle' が取れるとか。
だからパターンマッチング自体の記述は要らんよ。(見た目は同様ではあるが)
というかそれが絶対に必要ならこれまでどうしようもなかったことになっちゃうだろ。
> ExtensionAttributeを静的クラスに付与して、コンパイルの時にそれを見てるだけ。(中略)
> そうすると、存在しないメソッドは呼び出せないので失敗することになる
だから何?コンパイラが通らないだけだろ。
話がずれているか?
上記話のすり替えをしてくる奴だから信用はしていないが。
>>405を見る限りこちらは「一般」の仮想関数だと認識して回答した。(>>413,414)
そちらは
・「拡張メソッド」の動的解決はコストが高くて、仮想関数になりえなくて、呼び出しに失敗する
ことを言っていたか?
それなら「一般メソッド」について記述した>>413,414については見解の相違なしということでいいな。
> 他の言語がShapeクラスを継承した時に必ず拡張メソッドを書いてくれることは保証できない
当たり前。というか静的にリンクするんだから、namespaceに名前がない時点でコンパイルが通らないだけ。
使う気なら自前で定義なりusingしなければならないし、無ければ使えない。
多態する気なら、例えば多重継承として実装すればいいだけ。特別なコストはかからない。
実装方式は>>414のリンクに記述してあるとおり。
拡張メソッドを多重継承として実装出来ない理由があるか?
> 利点が皆無
どこがだよ?やけくそになってないか?
拡張メソッドが多態出来ればメリットがあるのは見たら分かるだろ。
今多態出来ていないのは何か理由があるか手を抜いているか(今後対応するか)だよ。

433:デフォルトの名無しさん
16/08/28 19:49:44.91 hQF+q+Zk.net
>>416
>毎回べた書き
その主張は俺じゃないが?
>クエリメソッド
何を言っているんだ?今でもできるぞ??
if( hoge is Rectangle){ ((Rectangle)hoge).Draw(); }
とか。状況によってもっとわかりにくくなるから、もっと簡潔に書きたいね、という話なんですが・・・
流石に語るのにC#を知らなすぎじゃないか?
>静的にリンクする
静的にリンクしないこともある。わざわざプラグインとかDLLとか言ってるでしょ?
C#では言語仕様上、コンパイル時に継承した型をすべて把握できない
あと、「他言語は対応していない」の部分を完全に無視してるみたいだけど、そこも要点なんですが
>「一般メソッド」について記述した>>413,414については見解の相違なし
訂正が入って主張がわかりにくくなってるが、一般メソッドに関しては問題ないと思われる
拡張メソッドはC#の言語仕様ではなくて共通言語仕様の方で対応してないので、同じ仕組を実現できない
>多重継承
全く独立したクラスのstaticメソッドをどうやって多重継承するの?
>拡張メソッドが多態出来ればメリットがあるのは見たら分かるだろ
ほぼ拡張メソッドじゃなくてさっき君が言ったShapeDrawクラスを使うべき案件
僅かにメリットがあっても、共通言語仕様を置き換えて、多言語のコンパイラ(VB.NET,F#,C++/CLI,JScript.NET等)を書き換え、UnityやMono、Xamarinを対応させ、後方互換を除去してまで導入する機能かというとそうは見えないな
.NET Frameworkが始まる前とかに提案すればよかったかもしれんが
本気で完璧な利点があると思うなら、Roslynにissueを立てると良い

434:デフォルトの名無しさん
16/08/28 20:04:28.22 hQF+q+Zk.net
>Shape.type で 'rectangle' や 'circle' が取れるとか。
ちなみに、これは一番危険
標準ライブラリにあるShapeクラスをA社とB社が継承し、AライブラリとBライブラリを作ったとする。
そのどちらのライブラリも必要だったので同時に使おうとすると、rectangleの名前が衝突して区別できない!となる。
そこで使うのが「型」なわけだ。
現在でも出来てるけど、コンパイラ制作とかだと頻繁に出てくるよね〜、なら、パターンマッチング導入しよう!という流れかと。

ちなみに、ShapeDrawクラス見たいのにも問題はあって、例えば構文解析した要素が10000を超える巨大な木構造があるとする。
それをGUI側ですべてNodeDrawみたいなクラスにラップするとその変換にかかる時間とメモリが馬


435:ュにならなくなってくる さらに、ライブラリの木構造が変更されると、GUI側ではすべて構築しなおし 手間を防ぐためにキャッシュしたり差分のみを変更して・・・という状況になる場合もある



436:デフォルトの名無しさん
16/08/28 20:23:46.58 5A6j7Ufp.net
なんでこんな荒ぶってんのこいつ
とりあえず落ち着いて猫でもわかるC#でも読みなって

437:デフォルトの名無しさん
16/08/28 20:23:47.93 +mkoP4gZ.net
>>417
こちらの認識は、ID:gXVhUUHW = ID:hQF+q+Zk だ。
違っていたのならすまんかった。
> クエリメソッド
クラスの中に複数種が入ることがある場合、(多態される場合)
一般的に「何が入っているか」は分かるようになっている。だからそれを使う。
C#の文法による解決は必要ない。(というかそうじゃないと動的型を取れない言語で使えない)
> あと、「他言語は対応していない」の部分を完全に無視してるみたいだけど、そこも要点なんですが
これについては関係ないとしか思えない。
拡張メソッドを自動的にエクスポート出来ると思っているのならそれが間違いだろ。
namespaceの中に拡張メソッドが見えていないと使えないのだから、
使う側が全部管理しないといけない。
同じ拡張メソッドを他でも使いたければ、その拡張メソッドを格納したクラスを使う側がusingしないといけない。
現在の実装はあくまで「コンパイラがstaticクラスのstaticメソッドに対しての関数呼び出し」に変更するだけ。
それがコンパイル時に出来なければコンパイルが通らない。他言語はどこに関係あるんだ?
> 全く独立したクラスのstaticメソッドをどうやって多重継承するの?
多重継承は全く独立したクラスを継承することですが?
当然これをやる時はvirtualにする(今現在のC#の制限事項をはがす)のだが、ついて来れているか?
元々「継承出来ないクラス」(stat;icクラス)にしか拡張メソッドを置けないのが問題であって、
拡張メソッドをシングルトンに置ければ何も問題なくなる。
そしてそれが実現出来ない技術的障害はない、というのが俺の主張。
この辺を最初から知っていて傍観してるのが>>378だろ。
> ほぼ拡張メソッドじゃなくてさっき君が言ったShapeDrawクラスを使うべき案件
いやそっちの意見は何なんだよ?
君はパターンマッチングが一番良いと思ってるんだろ?
俺は、「拡張メソッドで多態」(α)(β)(β+)の順で検討する。
ただ第一候補が今は駄目なことを知らなかったから迷走したが。

438:デフォルトの名無しさん
16/08/28 20:32:09.16 +mkoP4gZ.net
>>418
> そのどちらのライブラリも必要だったので同時に使おうとすると、rectangleの名前が衝突して区別できない!となる。
それは最初からポインタの型が違うから区別出来るだろ。
> ちなみに、、、、以降(ry
それがないように、本来は「直接クラスを拡張」(α)するなり「継承」(β)するべきだろ。
やむなく内包(β+)なりパターンマッチング(γ)になった場合は変更の影響は受けるのは当たり前。
ただ、(β+)よりも(γ)の方が記述の変更量は多いよ。
その辺はMSDNにもそのまま書いてある。
> 拡張メソッドは、一般的に、必要な場合に限り注意して実装することをお勧めします。
> クライアント コードで既存の型を拡張する必要がある場合、
> 可能であれば既存の型から派生した新しい型を作成することで行ってください。
> 詳細については、「継承 (C# プログラミング ガイド)」を参照してください。
> 拡張メソッドを使用して、変更できないソース コードのある型を拡張する場合、
> 型の実装の変更により拡張メソッドが破損するというリスクを負うことになります。
> URLリンク(msdn.microsoft.com)

439:デフォルトの名無しさん
16/08/28 20:34:15.18 veN4TyYm.net
>>420
何を言ってるのかよく分からんけどなんか盛大に勘違いしてる気がするw

440:デフォルトの名無しさん
16/08/28 20:43:32.81 lqCVK6M2.net
彼は拡張メソッドに夢をみすぎてるんだ
現実を知らないキッズには良くあることさ
拡張メソッドで多態()

441:デフォルトの名無しさん
16/08/28 20:56:44.18 hQF+q+Zk.net
こういうサンプルで示せばいいのかな?
細かく書くと面倒なので擬似コードだけど、(拡張メソッドを通常メソッドと同様に呼び出す以外は)同じことが実際にできる
URLリンク(ideone.com)

Main.exeではShapeクラスとRectクラスが定義されている。
これ単体ならすべてのShape継承クラスが拡張メソッドDrawを持ってる
Main.exe用のプラグイン、plugin.dllを他の人が後から作り、Main.exeのShapeを継承したTriangleクラスを実装している。



442:Main.exeはdllを動的に読み込み、インスタンスを作り、Hogeメソッドに渡している。 ここで、plugin.dllでは拡張メソッドDrawが定義されていない。そして、この拡張メソッドの定義を強制する手段が存在しない



443:デフォルトの名無しさん
16/08/28 21:08:44.28 hQF+q+Zk.net
>君はパターンマッチングが一番良いと思ってるんだろ?
いや、状況次第。ラッパークラスを作るほうが良い場合も多いと思うよ。
そのラッパークラスのインスタンスを作る時にパターンマッチ構文があれば簡潔にかけるので非常にありがたい

あと、今気づいたけど、そもそも構造体は仮想関数テーブル持ってないから多様性をもたせようが無かった
>>394でもthisポインタって言ってるけど、構造体の場合は仕組み上コピーが渡る

444:デフォルトの名無しさん
16/08/28 21:37:38.11 +mkoP4gZ.net
>>424
それが、「コンパイルには通るが拡張メソッドを呼ぶと失敗する」例だというのなら、
言いたいことは分かった。
ただ、それは失敗して当然というか、
「知らない図が書けない」だけであって、実装してない部分が動かないだけ。
丁寧にやるのなら、拡張メソッドがない場合に□を
出力して対応するしかないし、それだけでしかない。(文字化けのようなもの)
(C#に実装の有無を確認する方法があるかどうかは知らない。
JavaScriptでは問題なく出来る。
拡張メソッドが多態出来るのなら、親(Shape)に□を表示させるメソッドを実装しておく)
別にそれは正しく全てを実装する時に手間が増えるわけでもない。
dllが他言語から供給されたとしても関係ない。
そもそもそちらの言うとおりShapeが演算用クラスであった場合、
クラスを追加する側にこちら『だけ』で使っている拡張メソッドを実装してくれと言うのが無理。
拡張メソッドは使う側が全部管理しなければならないだけ。実装も。
実装を強制する方法はないが、その必要もない。
自前で実装済みかどうかを判定して対応するのみ。
(定義を確認する方法がないのなら困ったことになるが、
それでも最悪try-catchは出来ると思うが、駄目なのか?)

445:デフォルトの名無しさん
16/08/28 21:46:13.45 +mkoP4gZ.net
>>425
> 構造体
これはShapeがクラスではなく構造体だった仮定か?
それは最初から間違いで、クラスにしてもらうしかない。
どのやり方がいいのかは合意をとる必要はないけど、
俺が思うには「拡張メソッドで多態」が出来れば全て満足で上手く行く。
現状の拡張メソッドの仕様では旨味が無く、使いどころがない。
正直C#でこの手の「残念仕様」を見るのは初めてで、少し驚きだ。
(C#の仕様はどれもこれも何を意図しているか大体分かるものばかりだった)
ただ、やる気だけの問題だと思うから、今後拡張される可能性はあると俺は思うけど。

446:デフォルトの名無しさん
16/08/28 21:52:14.06 veN4TyYm.net
>>427
そんな自分で自分の足を打ち抜くような機能が入るわけないじゃんw

447:デフォルトの名無しさん
16/08/28 21:55:53.66 +mkoP4gZ.net
追加
>>424
その場合、仮にdll側で拡張メソッドを実装してくれていたとしても、インポート出来ないだろ。
こちら側がコンパイル時に見えてないと駄目なんだからさ。
だから今の仕様は「全部自前で用意しろ」なんだよ。
俺もそれでいいと思うし。
拡張メソッドを実装したクラスをインポートするっていうことも出来る(ようになる)のかもしれんが。

448:デフォルトの名無しさん
16/08/28 22:01:29.02 xWdxGs/J.net
これを15年前の世界から書き込んでるのだから、彼は凄いよ。
virtualも拡張メソッドも理解出来てなくて仕方ない。まともな動作環境すらない世界で仕様を理解しようと、間違ったことをワザと書いて、我々に答えさせてるんだから。

449:デフォルトの名無しさん
16/08/28 22:20:25.25 23NihOTg.net
C#の拡張メソッドをJavaScriptのプロトタイプ拡張と同じ感覚で考えてんのかね
スクリプト言語やりすぎると頭おかしくなるってのは本当だったんだ

450:デフォルトの名無しさん
16/08/28 22:24:20.01 ev9L5f83.net
javascriptでもプロトタイプ拡張は99.9%バッドプラクティスだけどな
気づくのに数年掛かった(prototype.jsが持て囃された期間を考えてみたまえ)程度にあいつらフロントエンジニア共は馬鹿だ

451:デフォルトの名無しさん
16/08/28 22:46:16.98 hQF+q+Zk.net
>>426
それがC#の設計思考とずれてるんだよ。
できるならば静的に解決したい。コンパイルに通ったならメソッドが存在し、存在することを前提に最適化したい。
ただの静的メソッド呼び出しだったのに、動的に確認する分かなりコストが高くなる。数万の木構造にやるなら1msが命取り
あとは、それを実装すると名前解決が異常に複雑になり、今後の言語拡張の障害にもなるな
その程度で良いならRoslynを使ってVSのプラグインでshape.Draw()ってコードをパターンマッチングに展開するプラグインを作ればいいんじゃないかな。

452:デフォルトの名無しさん
16/08/28 23:08:26.53 +mkoP4gZ.net
>>433
何について言っている?
「拡張メソッドの多態」についてなら、既に言ったようにローカルに多重継承させればいいだけ。
実装自体も無理はないし、動作速度も問題ないと思うよ。
各クラスのvtableをコピーすることにはなるけど、
オブジェクトを直接vtableに載せていることはないだろうし、
コピー領域は、sizeof(void*)*フィールド個数 Bytes でしかない。
もちろん他の実装も出来るだろうし、いずれにしても必要になればMSが検討すればいいだけ。
多分ここら辺の話が通じないのは、君がvtableの実装を理解出来ていないのだと思うよ。
それは>>414にあるURLを全部読めばいい。
C++やC#のコンパイル言語は、メソッドは動的に名前で解決するわけではないんだよ。
(なおJavaScriptは全面的に動的解決だが、それでもC#の1.5倍ほど遅いだけ。)
俺は「拡張メソッドの多態」は欲しいと思う。
君はこれについて「要らない」のか「欲しいけど出来ないという意見」なのかはっきりしないが。

453:デフォルトの名無しさん
16/08/28 23:14:10.11 rlU+i3Q+.net
そんな極々ニッチな需要のためにMSが動くわけないだろ
そんなに自分のアイデアが優れてると思うなら実装して然るべき場所で評価してもらえよ
今やコンパイラもオープンな時代だから出来ないことはない
良い加減うっとおしいんだよ
攻撃的な口調で長文連投すんなハゲ

454:デフォルトの名無しさん
16/08/29 00:39:03.09 0+IBopma.net
>>434
こちらのvtableの知識を疑う前に、staticがvtableにあると勘違いしていた理由を考えるとかC#の勉強するとかしたほうが良いかと
プラグイン等により拡張メソッドを持たないインスタンスが渡ることを考慮し、vtableの実行の前に存在判定が必要で結構コストになる
また、Javascriptが早いのはJITが鬼のように最適化してるからで、そこまで考えるとstaticメソッドのインライン展開が妨害されるとか、
質問としては、vtableのコピーでなんでフィールドの個数が出てくるの?
あと、別のファイルだと別の拡張メソッド呼び出しになるかもしれんが、どのタイミングでインスタンスのvftable書き換えるの?
その場合、拡張メソッドの呼び出しはすべてスレッドセーフじゃなくなる?
今のところメリットが0とは言わないが、メリット<<<実装の手間、影響

455:デフォルトの名無しさん
16/08/29 00:58:40.06 bQrj623w.net
C#でアスペクト注入したい
RealProxyか実行時コンパイル以外に手段はある?

456:デフォルトの名無しさん
16/08/29 14:42:36.92 iNmqLiUV.net
c#を主に使っていて時々php書くとphpが使いにくいてイライラするのですが、皆さんそういう事有りますか?

457:デフォルトの名無しさん
16/08/29 14:53:02.96 fXL0TTLw.net
>>438
フツー

458:デフォルトの名無しさん
16/08/29 15:11:05.94 yhjzEVuM.net
歯ブラシでプログラムを書こうとしたら辛いのは当たり前だろう
URLリンク(en.m.wikiquote.org)
>PHP is about as exciting as your toothbrush.

459:デフォルトの名無しさん
16/08/29 18:41:52.94 IWCj2egw.net
ASP.NET CoreでWEBアプリを作っています
機械的に処理を行うためHTMLの代わり


460:にJSONを返さなくてはいけません この場合MVCで作るべきでしょうか(ViewでJSONを生成)



461:デフォルトの名無しさん
16/08/29 18:45:13.24 zht9j9T7.net
>>441
なぜViewで?

462:デフォルトの名無しさん
16/08/29 18:52:19.01 IWCj2egw.net
>>442
どのような設計が正しいのかを聞きたいです
簡単に言うとTwitterのUIは作らずにJSONを返すAPIだけをASP.NET Coreで作る感じです

463:デフォルトの名無しさん
16/08/29 18:54:32.44 zht9j9T7.net
>>443
Web API(CoreではMVCと統合されたけど)を使いたいってこと?

464:デフォルトの名無しさん
16/08/29 18:57:50.47 IWCj2egw.net
>>444
そうです
ASP.NETの無印はWEB APIがあるみたいですが、Coreだとないみたいなので…

465:デフォルトの名無しさん
16/08/29 19:04:08.33 zht9j9T7.net
>>445
Coreではライブラリが統一されただけだから普通に使えるよ。
URLリンク(docs.asp.net)

466:デフォルトの名無しさん
16/08/29 19:10:38.42 IWCj2egw.net
>>446
ありがとうございます
WEB APIはCoreでも使えたんですね
もう一ついいですか?
ASP.NET無印を使ったことがなく、いきなりCoreから入るのですが、
まだCoreがリリースされてあまり経っていないらしく情報が少ないのですが、
無印の情報はCoreにもある程度は応用出来るのでしょうか?

467:デフォルトの名無しさん
16/08/29 19:35:09.64 zht9j9T7.net
>>447
無印って、ASP.NET Web APIのことを言ってる?基本は一緒だけど、Coreが出た以上、特に今までのWeb APIはオワコン
Coreを使わなければならない理由があるの?

468:デフォルトの名無しさん
16/08/29 20:37:32.13 IWCj2egw.net
>>448
Linux鯖を使いたいから
WinVPS高いし

469:デフォルトの名無しさん
16/08/29 21:18:16.62 shRUR2oh.net
高いのは嫌だリスクは取りたくないってガキじゃあるまいし

470:デフォルトの名無しさん
16/08/29 21:19:28.87 rWWvEZg8.net
>>450
ここは普通にガキが来る板だぞ

471:デフォルトの名無しさん
16/08/29 21:33:00.30 oeiBIMAZ.net
ガキだろうが年寄りだろうがケチりたい人はケチりたいんじゃね

472:デフォルトの名無しさん
16/08/29 21:34:22.99 IWCj2egw.net
>>450
ガキだから金がない
さくらVPSでも結構きついし

473:デフォルトの名無しさん
16/08/29 21:49:29.10 1G08D0Wz.net
お金が無い分、努力でカバーだね。
情報少ないから、ぜひ先駆者となってくれ!

474:デフォルトの名無しさん
16/08/29 21:52:42.08 IVf1OSSE.net
>>450
> 高いのは嫌だ
はわかるけど
> リスクは取りたくない
ってどこから出てきたんだ?
Linux 鯖で .Net なんてリスクだらけだと思うが

475:デフォルトの名無しさん
16/08/29 22:01:53.90 HSXk2xhn.net
Node.jsとかでよくね?
ちょっとしたAPIにC#とか大袈裟すぎでしょ

476:デフォルトの名無しさん
16/08/29 22:14:41.24 IWCj2egw.net
>>456
ちょっとしたじゃなくて結構大規模になる予定
あと動的型付けは苦手(TypeScriptはあるけどC#の方が好き)

477:デフォルトの名無しさん
16/08/29 22:55:39.71 AyW9Pu98.net
>>457
Linuxには精通してるってことでいいんだよね?

478:デフォルトの名無しさん
16/08/29 23:00:29.13 IWCj2egw.net
>>458
ラズパイで鯖建てする程度なら出来るけど

479:デフォルトの名無しさん
16/08/30 10:16:24.70 8eGP8u09.net
まあコンソール使えりゃどうにかなるかな

480:デフォルトの名無しさん
16/08/31 22:36:07.93 0fzmkTEU.net
C# 7、そしてその先へ: 非同期処理(前編) − Task-like
URLリンク(www.buildinsider.net)
C# 7、そしてその先へ: 非同期処理(後編)− 非同期シーケンス
URLリンク(www.buildinsider.net)

481:デフォルトの名無しさん
16/08/31 22:39:34.64 97WvllZy.net
コピペマンって本人は親切のつもりなんだろうし、本人気づいてないだろうけど不気味だよw

482:デフォルトの名無しさん
16/08/31 23:35:57.85 +hoACOJG.net
パフォーマンスをシビアに意識するのはもはやライブラリ作っている人やそういった
高速化を専門にしている人だけあって毎日コード書いてる人間としては書きやすさだけが気になる

483:デフォルトの名無しさん
16/08/31 23:46:34.06 +hoACOJG.net
今後もまた無駄な名前空間がぼこぼこ増えていくんだろう
MSはnamespaceをごちゃごちゃさせ過ぎてる
すっきり数本の柱にしておけばよかったのに細分化させすぎだ

484:デフォルトの名無しさん
16/08/31 23:56:22.35 lLnW0vHt.net
新しいおもちゃが手にはいると遊びたくなるものさ

485:デフォルトの名無しさん
16/09/01 00:11:33.35 Xz8sejsg.net
Scalaの糞の山に比べたらこの程度可愛いもん

486:デフォルトの名無しさん
16/09/01 00:44:15.01 YmetP/KJ.net
大きすぎるnamespaceよりマシ

487:デフォルトの名無しさん
16/09/01 04:01:29.40 rDaq2Eci.net
毎日コード書ける仕事したい。
机上で数ヶ月会議して設計して、作って仕様変更とか無駄なことやめたい。

488:デフォルトの名無しさん
16/09/02 15:05:01.55 oqbH3zDE.net
今 Microsoft Visual Studio Community 2015 だかってのをインストールした
C#は全く知らない。
この統合環境の使いかたもほぼ分からなくて困ってる。
CUI のhello worldだけは出力させてみた。

こんな俺に学習用のいいサイトよろしくお願いします。

489:デフォルトの名無しさん
16/09/02 15:13:59.98 LbMFm82d.net
とりあえず ++C++; 未確認飛行 C でいいんじゃないでしょうか

490:デフォルトの名無しさん
16/09/02 15:29:48.83 oqbH3zDE.net
ありがとう。ではそこで学習する事にします。

今とりあえず
int i = 10;
Console.WriteLine(i + " " + "hello_world");
これを実行させてみたのですが、
スクリプトのごとく数値が都合よく文字に変換されて実行されました。
数値と文字は暗黙の自動変換なのでしょうか?

491:デフォルトの名無しさん
16/09/02 15:41:30.76 Pni+o0iv.net
+ 演算子 (C# リファレンス)
URLリンク(msdn.microsoft.com)

492:デフォルトの名無しさん
16/09/02 15:53:07.39 oqbH3zDE.net
ありがとう

493:デフォルトの名無しさん
16/09/02 18:32:47.06 Q71J+JAr.net
Microsoft.Office.Interop.Excelのcomを使って、既存のグラフシートを編集しようと思うのですが、
下記のコードを実行すると、エラー0x8002000Bが出てアクセスできません。
Worksheet ws = wb.Sheets["graph1"];
既存のグラフシートにアクセスするにはどうしたらいいのですか?

494:デフォルトの名無しさん
16/09/02 18:41:51.61 hbWVf6eK.net
>>474
そんなことやったことないんでよく知らんけど、ここ見る限りSheetsじゃなくてChartsの方
使わないとだめなんじゃないの?
URLリンク(msdn.microsoft.com)

495:デフォルトの名無しさん
16/09/02 19:22:01.67 VaHoIWRz.net
IDE使えないって人に++c++進めるのはどうかと思うけどw

496:デフォルトの名無しさん
16/09/02 21:17:39.97 oqbH3zDE.net
なんでボールから入るんだよ

497:デフォルトの名無しさん
16/09/02 21:17:56.50 oqbH3zDE.net
ごめんスレ間違えた

498:デフォルトの名無しさん
16/09/03 01:22:42.31 PSgZ0shn.net
いままでvbaで開発してて最近c#勉強してるんだけど
visual studioで開発するときvbaでいうモジュール単位(vb editor上でmoduleっていわれるやつ)に分ける方法教えてクレメンス
クラスとか作ればソリューションエクスプローラに自動的に追加されるっぽいけど
コードが縦に長くなって開発しづらい
たぶんvbeなんかよりもよっぽど開発しやすい方法があるんだろうけど
プログラミングの仕方というより開発の仕方みたいなのを解説してくれているhpとか本があったら教えてほしい
てかoopの考え方を理解出来てな


499:「のが問題かもしらん スレ違いだったらごめんなさい



500:デフォルトの名無しさん
16/09/03 01:27:37.27 Jo2eCVzY.net
>>474
結局質問だけしてトンズラか。どうせマルチくんなんだろうな。
>>479
君はVBAも良く分かってないと思うw
とりあえずC#にモジュールはない。
VB.NETにはあるけど普通はまず使わない。

501:デフォルトの名無しさん
16/09/03 01:33:50.12 PSgZ0shn.net
>>480
いわゆるモジュールじゃねーっす
エクセルとかもってるならvbe開いてモジュール追加って出来るあれです
んで、開発の仕方みたいなのの情報しりませんか

502:デフォルトの名無しさん
16/09/03 02:08:46.56 AuZUWRpv.net
>>481
OOP学んで適当にファイル分割するのが基本かな
あとは、クラスビューとか定義に移動とかいろんな機能があるから好みの使い方を見つけるしかなさそう
オープンソースとか読むと参考にはなる
こんなに細分化するかーとか、この書き方は初めて見たというのも時々あるので、人の好みがそれなりに強いかも

503:デフォルトの名無しさん
16/09/03 02:11:08.15 FcIsU4jd.net
>>481
ソースファイルを追加したいなら
プロジェクトを右クリックして
追加 - 新しい項目
コード - クラス
で、名前を入れて出来上がり

504:デフォルトの名無しさん
16/09/03 02:21:21.74 PSgZ0shn.net
>>482
あじゃっす
王道なしってことっすね
vbaでつくった1万行程度のプログラムをc#で作り直そうとしたら
にっちもさっちもいかなくて
(最初はbutton click event以下に超長いコードかいてたw)
c#サンプルコードでググったやつをいくつか見たんですけどどれも短めで
オープンソースっすか、とたんに難しくなりそうで敬遠してたんですけど、見てみます
>>483
コレダ!
あざーす!

505:デフォルトの名無しさん
16/09/03 02:50:32.40 GFDCUR4+.net
>>483
全然関係ない俺だけどそれ知りたかったありがとう
統合環境超むずい

506:デフォルトの名無しさん
16/09/03 07:36:39.22 FcIsU4jd.net
「新しい項目」って言うのがちょっと思い付きにくいかな
新しい項目って言うのを覚えておけば、右上の「クイック起動」に新しい項目って入れると
プロジェクト-新しい項目の追加...
って表示されるから覚えておくとなんかの役に立つかも
追加でも同じように表示されるけど、追加は他にも
ファイル-ソース管理に追加
とか似たような項目がいっぱい出てきてちょっと探しにくい

507:デフォルトの名無しさん
16/09/03 10:32:43.91 08YRGffV.net
>>485
プログラミングはやめた方がいい。
言語のセンスなさすぎ。


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

2405日前に更新/279 KB
担当:undef