-
-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
target-typed #243
Comments
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/proposals/csharp-7.1/target-typed-default |
class Base { }
class A : Base { }
class B : Base { }
class Program
{
static void Main()
{
Base[] x = { new A(), new B() }; // これは行ける(target-typed)
var y = new Base[] { new A(), new B() }; // これも行ける
Base[] z = new[] { new A(), new B() }; // これはダメ(提案は出てる)
}
}
|
target-typed new 自体は 9.0 行き。 |
セクションは「その他」配下かな。 ページ名ページ名で悩んでる。「型決定」辺りがいい気はしつつ、あんまりそういう呼び方はされておらず。 inference は意外と少ない C# 3.0 世代の機能にしか使われてないし、「var declaration」とかは多くあっても Inference って単語は意外とない。 resolution (解決)を使ってるのはメソッドオーバーロードくらい。 たいていのもの、例えば null から任意の参照型とか、ラムダ式からデリゲートとかは「implicit conversion」のセクションに並んでる。 「型推論」系で行くなら、すでに「型推論と匿名型」ってページがあったりするんだけど… これのリニューアルにする? 導入例として以下のようながたがあったとして class A { }
class B : A { } 推論のない書き方両辺の型が一致 A x = new A();
暗黙の型変換 A x = new B();
エラーになる例 A x = new object();
推論あり暗黙的な型推論 よくある向き var x = new A();
逆向き(ターゲット型) A x = default;
ソース/ターゲット
= が典型例で、その場合 = の左右どちらにあるかで、 ソース型から
static object M(object x) => x;
static T M<T>(T x) => x;
static void Main()
{
var x = M(1);
} ターゲット型から
整数単純そうで案外複雑なのが整数リテラル。 文字列特殊なリテラルのとこにリンク張って終わり? ラムダ式ラムダ式+オーバーロード解決の型決定は中身まで追う switchこのノリで、switch 式には target-typed な型決定が実装された 今後(C# 9.0 以降)の予定として
共通型以下の場合、
target-typed で決定できる場合もある。 C# 8.0 時点ではそんなに賢くない。
おまけ: 型変換じゃないけどdotnet/csharplang#2926 |
switch 式と条件演算子
?:
の target-typed 型推論が実装されそう。ラムダ式とかも target-typed 型推論なんだけど、そういうのは「左辺からの型推論」って書き方してきてるんだけど、この言葉もしっくりこず。
今後、 target-typed new もあるはずだし。
あと、 default リテラルが target-typed。
string interpolation が string になるか FormattableString になるかも target-typed。
これまでの「左辺から」って言い方でまずいのが、
target type ⊃ { 左辺, メソッド呼び出しの引数 }
とかな関係で、不正確(一部分しかさせない)だから。
target-typed な機能がすでに docs にドキュメントのある範囲であるかどうか、
あるなら日本語訳もされてるかどうか、
されてればそれではどう書かれてるかとか調べる。
The text was updated successfully, but these errors were encountered: