以下について明確にする必要があります。
is/as 演算子
out/ref パラメーター修飾子
タイプ
気が進まない場合は、質問全体ではなく、知っていることや返信したいことだけに返信してください。
はい、これらについて説明を求めています。私を訂正するか、私がすでに言ったことに追加してください。
さて、私は少しググって、さまざまなサイト、MSDN などにたどり着きました。コンセプト全体を明確にするのに役立つコードを書き、最終的にそれを最大限に活用できるようにしてくれる人が必要です。これが他の人にも役立つことを願っています。
基本的にこれは私が理解したことです:
A)は
疑似コードで
オブジェクトがこのタイプの場合は true、そうでない場合は false
簡単。それとも私はここで何か間違ったことをしていますか?
一部のタイプに制限や問題はありますか?
このコードは問題なく動作するので、これでうまくいったと思います。
object s = new SqlBoolean();
if (s is SqlBoolean)
{
Console.WriteLine("Is SqlBoolean");
Console.ReadLine();
}
2)として
まあ、私はまだこれを完全に理解する必要があります。
MSDN レポート:
as 演算子は、互換性のある型間の変換を実行するために使用されます。as 演算子は、例外を発生させる代わりに、変換の失敗時に null を生成することを除いて、キャストに似ています。
さて、私はオブジェクト配列でループを試しましたが、基本的にはプリミティブのみを変換し、多くの問題を抱えています(少し難しいキャスティングごとにnullまたは何かがスローされます)
いえ
using System;
using System.Data.SqlTypes;
class StackOverflow
{
public static void Main()
{
string country = "jii";
string vatNum= "dde";
object[] MyObjects = {country,
vatNum
};
for (int i = 0; i<=MyObjects.Length-1;i++)
{
MyObjects[i] = MyObjects[i] as SqlString?;
Console.WriteLine(MyObjects[i].ToString() + " " + MyObjects[i].GetType());
Console.ReadLine();
}
}
}
私が作成しているプログラムでは、これらの値を SqlStrings や SqlBooleans などに変換する必要があります。
「SqlString?」という行で SqlString を Nullable に強制していることに注意してください。最後に疑問符を付けます (? 強制的に nullable にする、誰がそれを知っていた!:D)。
基本的に、例外を使用せずに低レベルの変換を行うのに役立ちますか? または何?
3) refとout
基本的に ref は、事前に宣言された変数の値を関数内から変更します。
IE
using System;
class StackOverflow
{
public static void Main()
{
int x = 10;
Write(func(ref x).ToString());
Write(Convert.ToString(x));
}
public static int func(ref int y)
{
y += 10;
return y;
}
public static void Write(string z)
{
Console.WriteLine(z);
Console.ReadLine();
}
}
これを実行しても問題はなく、出力は 20 20 になり、両方の参照を削除すると 20 10 が出力されます
(ref は、メソッド内でインスタンスを作成せずに、外部で宣言された x を直接変更します)
アウトはどうですか?使用は何ですか????
わかりません。どこかを読むと、refと同じことを行うパラメーターのように見えますが、何らかの出力パラメーターを持つことができます。
前に示したコードで ref の代わりに出力すると、IntelliSense によってのみコンパイル エラーが発生し、それらの出力パラメーターを表示する方法さえわかりません。
私がやっているプロジェクトでは、次のコードを使用しています。
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
さて、checkVat は ヨーロッパのオンライン チェック Web サービスのコードです。
パラメーターがあり、webservice Web サイトのライブラリを使用する wsdl webservice によって生成されていることがわかります (必要に応じてライブラリへのリンク) 。
out パラメーターを使用するにはどうすればよいですか? return を使用せずに何らかの出力を行うためのものですか? それらをどのように使用しますか?とても詳しくお願いします
4)タイプ
これは、渡した Type の System.Type から型を返します。
最初に、渡したオブジェクトのタイプを次のように取得できると思いました
int x;
SqlBoolean xy = new SqlBoolean();
typeof(x) // integer
typeof(xy) // SqlBoolean
しかし、そうではありません。
System.Type から型を返すだけです。
お気に入り
typeof(int).ToString() // System.Int32 またはそのようなもの typeof(xy).ToString() // System.Data.SqlTypes.SqlSqlBoolean
そして、私はそれをどうするか本当に知りません。
オブジェクトのタイプを取得するには、オブジェクトなどから .GetType のようなことをしなければなりません。
では、typeof の実用的な用途と、それについて何が欠けているのでしょうか?
ありがとう