本質的なC#の[4]オペレータと制御プロセス

書き込みの前の3つの方法のこのブログの拡張子、コンテンツがより基本的でなく、仕上げの前にもっと漠然とした概念のいくつかはあることはもちろんのC#のプロパティとホットとコールドの形で新たな知識の特性の古いリストを、見落とすことは容易であるため、 。

コンセプト再生

図1に示すように、操作者の概念は、オペレータは、次のロジックを備え、それぞれ、それぞれ1、2、3つのオペランドに対応する、モノ - 、ジ - 、トリ - 3つのカテゴリに分類されます。

  • プラスまたはマイナス1元事業者、正と負の値を表し、
  • バイナリ算術+などの演算子、、 - 、*、/、%などが挙げられます。
  • 三項条件演算子であって、?:3つのオペランド介して2つの演算子

2、コードブロック間の差、および宣言空間の範囲は:という名前の論理コンテナスペース宣言もので、コードブロックは2つのカッコの間に複数の文で、範囲は物事をという名前のスコープステートメントを示します。スコープは、名前参照のこと、および2つの物事が同じ名前空間の競合を宣言するかどうかを決定するために何を決定します

3、switch文は、以下の仕様を使用

  • ステートメントを切り替える必要があり表現は、整数または列挙タイプ、クラスまたはタイプ、一体または列挙型に変換するための単一のクラス変換機能がある、請求あります。
  • スイッチでは、case文の任意の番号を持つことができます。それぞれの場合を比較する値とコロンが続きます。
  • 定数式の場合は、スイッチ内の同じデータ型の変数を持っている必要があり、かつ一定でなければなりません。
  • テストされている変数の一定のケースがに等しい場合、break文は、これまでに遭遇するまで実行されるステートメントの場合に続きます。break文が検出されると、終了スイッチ、制御フローは、switchステートメントの後に次の行にジャンプします。
  • 必ずしもすべてのケースには、休憩を含める必要があります。case文が空の場合、あなたが含まれて壊すことができない、制御フローは、ブレークがこれまでに遭遇するまで、ケースを追跡していきます
  • C#は、切替部は、次のセクションにスイッチから継続させます。case文と文との契約がある場合は、それはそれ以外の場合は、コンパイルに失敗し、ブレークまたは他のジャンプステートメントを含める必要があります
  • switch文は、オプションのデフォルトのケースを持つことができ、それは、スイッチの最後に表示されます。デフォルトの場合は、上記の例すべてで使用可能なタスクを実行するときに当てはまりません。デフォルトのcase文でのブレークは必要ありません。
  • C#は、を介して他のcaseラベルにケースからの明示的なラベルをサポートしていません。あなたが明示的なcaseラベルを介して他のタグを1ケースからC#のサポートをしたい場合は、スイッチケースや後藤デフォルトのgotoを使用することができます

4、C#プリコンパイラディレクティブ、および定数と定数式、のような、C#プリコンパイラ・ディレクティブは、コンパイル時に呼び出されます。
ここに画像を挿入説明

値は、一般的に#defineを使用する場合、この定義によってコードをコンパイルします。

#define PI
using System;
namespace PreprocessorDAppl
{
   class Program
   {
      static void Main(string[] args)
      {
         #if (PI)
            Console.WriteLine("PI is defined");
         #else
            Console.WriteLine("PI is not defined");
         #endif
         Console.ReadKey();
      }
   }
}

出力は次のようになります。

PI is defined

デバッグ時にデバッグを実行するためにどのようなコードを決定するために使用することができた場合:

   public static void Main(string[] fileName)
        {
#if DEBUG
            System.Console.WriteLine("只有debug时候使用");
#endif
        }

C#の寒さの知識

C#、のみ割り当て、呼び出し、インクリメント、デクリメント、1、 非同期プログラミングのための)のawaitスタンドアロンステートメントとして使用すると、オブジェクト作成式。

2、再びコーミング演算子の優先順位を右に!次のように上から下に分類できます。

  • 主なオペレータ:はい++ ,,()、+、 - ,,〜!この段階では、単位演算子である特別な操作優先括弧その変化を有することに加えています。オペレータの優先順位は、彼らがオペランドそれに直接作用するためと考え、非常に高いことを意味し、式の定義において、ここで見ることができます。
  • 算術演算子:従来の算術演算子では、我々は多くの場合、*、/、%、+、そこに使用-それは高い位置に来て、彼らはより多く使用しているので、となります。これは、すべてのバイナリ演算子は最高の優先順位にある特別な2つの位置演算子、<<と>>であり、比較演算子、論理演算子は、従来の加算演算子と比較せいオペレータのこのセットは数値計算によって行われます。
  • 比較演算子:を含む、<、>、<=、> =、==、=六の合計が、特性があり、それは以下の優先順位よりも大きいとより!
  • 論理演算子、本来4が、最前列で「しない」演算子ユニットについて、存在するようにのみ&、^、論理演算子|、と2つの補助コード効率を向上させるための演算子&&、||および5の合計そう。
  • 代入演算子は、最大このレベルまで、ほとんどのバイナリ演算子は、「=」記号は、代入演算子となり、ここで追加することを先に登場しました。もちろん、最初に基本的な代入演算子「=」、次に「* =、/ =、%=、+ =、 - =」従来の演算器へと進化し、その順序は、従来の算術演算子の同じオーダーであり;そして変位演算子、論理演算子、だけでなく、彼らは次のように配置される前に、オーダーの進化「<< =、>> =、& =、^ =、| =」。比較演算子とオペランドのデータ型をによって生成される結果の異なるデータ型なので、彼らは、代入演算子を持っていません。

ここに画像を挿入説明

3は、C#ほとんどの演算子は連想左が、代入演算子は右結合であるされています

:図4は、文字が算術演算子で使用される値の最初の文字を、次に得るために数字に変換しました

       public static void Main()
        {
            int n = '3' + '4';
            char c = (char)n;
            System.Console.WriteLine(c);  //g
        }

5,结合性和优先级,结合性决定相似操作符的执行顺序,优先级决定不相似操作符的执行顺序,而操作数总是从左向右求值操作符的结合性和优先级只影响操作符自身的执行顺序,不影响操作数的求值顺序

6,C#禁止一个代码块中声明的局部变量在其子代码块中重复声明

7,&&和||是短路运算符,只要左边第一个表达式满足条件,就不会继续对右边求值

8,事先知道循环次数使用for循环,事先不知道使用while

9,goto语句可以使用lable的方式执行:

myLabel: System.Console.WriteLine("if条件要求为bool类型哦");
goto myLabel;

但是需要注意的是,goto只能跳转到自己上级代码块和同级代码块,不能跳到自己的子代码块,而且要避免使用goto语句。

C#新知识

1,var temp=++count是先给count自增再赋值,var temp=count++是先给temp赋值再自增count,需要注意的是,这个操作不是原子操作,是线程不安全的

2,空合并操作符:如果fileName为null,就使用tml,也就是如果这个值为null,就使用另一个。

      public static void Main()
        {
            string fileName = null;
            string fullName = fileName ?? "tml";
        }

3,空条件操作符:调用成员前先进行空检查,需要注意,int类型的话返回的是int?,数值类型都类似。

     public static void Main(string[] fileName)
        {
            var length = fileName?.Length;
        }

需要注意的是,if条件操作符要求的条件必须为bool类型,所以要结合空合并操作符使用

 public static void Main(string[] fileName)
        {
            if (fileName[0]?.StartsWith("") ?? false)
            {
                System.Console.WriteLine("if条件要求为bool类型哦");
            }
        }

4,foreach用于循环遍历数据项集合的每一项,保证不发生越界错误!foreach循环期间,禁止修改循环变量(数据项)以及数据集合

5、C#7.0スタート、支持パターンマッチング、それぞれの場合にスイッチは必ずしも同じタイプではありません!

public static double ComputeAreaModernSwitch(object shape)
{
    switch (shape)
    {
        case Square s:
            return s.Side * s.Side;
        case Circle c:
            return c.Radius * c.Radius * Math.PI;
        case Rectangle r:
            return r.Height * r.Length;
        default:
            throw new ArgumentException(
                message: "shape is not a recognized shape",
                paramName: nameof(shape));
    }
}
公開された240元の記事 ウォンの賞賛114 ビュー180 000 +

おすすめ

転載: blog.csdn.net/sinat_33087001/article/details/103376158