C#,ASP.Net開発ノート

8865 ワード

1.クラスメソッドと拡張メソッドの違い:


    TestClass test = null ;
     test.ExtendMethod() ;//拡張方法は間違いなく、方法で対象が空かどうかを判断できます. 
 
    public  static T  FuncReturnSelf(this T Self, string param)
    {
    ...
    return Self ;
     }

2.Serializable AttributeとISerializableの違い:


ISerializableは、オブジェクト全体のプロパティをシーケンス化できます.親を含めます.比較的完全なシーケンス化です. 

 3. イベントの委任ですか、それともインタフェースの実装を構成しますか。


下位レベルでは、機能を上位レベルに開放する実装スキームです.1つは、コンフィギュレーションによって、あるインタフェースを実装する実装をコンフィギュレーションし、下位レベルでオブジェクトインスタンス(重点キャッシュオブジェクト)を反射し、あるメソッドを呼び出すことです.高レベルのカスタムコードが必要な場合に便利です.
上位レベルの機能、または関数だけが必要な場合は、1つのイベントが委任されたことを暴露し、上位レベルにイベントを実現させることができます.

4.属性名、メソッド名、クラス名は同じクラスにあり、同じ名前は使用できません。


子クラスの属性名が親クラスのメソッド名と同じ名前である場合、警告が表示されます.しかし、使用の妨げにはならない.

 


5.業務ロジックでは、まず不正な条件の判断を行い、判断と業務ロジックを分ける.


6.Mvcは一種の思想であり、多くの場所に応用できる。


例えば、業務ロジックにおいて、業務処理層の間でこのModelを用いる、業務層でデータを処理し、ビュー層でメッセージを処理するModelを定義する.

7.約束は配置より優れている.


8.漏斗モデルに基づくIO.


すなわち、厳密な出力、ゆとりのある入力である.
例:
public string proc ( string msg)
{
return msg.Trim() ; //
}

public check( string msg)
{
if ( msg.Trim() == "Edit") return true ; //
else return false ;
}

 

9.技術的に業務ミスを回避する。


例えば同時性ビジネスシーン:ユーザーは毎年固定ファイル名のファイルをアップロードする.開発者は当然固定ファイル名で固定フォルダの下に保存する.最低でもロックして 

10.反射による汎用クラスの作成

var type = typeof(SystemException);
var obj = Activator.CreateInstance(
typeof(List<>).MakeGenericType(new Type[] { type }),
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance,
null, null, null);

 11. ロックはマルチCPU、マルチコアCPUに対して反発する. 


 12.辞書の初期化

Dictionary<int, StudentName> students = new Dictionary<int, StudentName>()
{
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}},
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}
};
 

13.四捨五入の問題:

    (int)( value + 0.5)           .

14.前にデバッグで出会ったこの問題は、再び発生し、意外にも忘れて、しっかり覚えています。

        ,           , :

public static implicit operator StringLinker(string StringOne){ return new StringLinker(StringOne) ;}
しかし、Stringの値が中間プロセスでobjectとして箱詰めされる場合、object obj=value;   var result =  (StringLinker)obj ; StringLinkerが定義した変換方法がobjectからStringLinkerに移行していないため、この行のコードはタイプ変換をトリガーしません.必要(StringLiner)(string)obj;汎用型を用いると、汎用型変換は無効である. var result = (StringLinker)(D)obj ; ゞ悲催.!ゞ
同様の問題は、拡張メソッドにも現れ、拡張メソッド名とクラスに現れるメソッドが重複すると、拡張メソッド名が無効になります.次のようになります.
public static string ToJson(this object obj){ return obj.ToJsonString();}
public class MyOqlSet
{
  public string ToJson(){ return this.ToJsonString(); }
}
 
var set = new MyOqlSet() ;
set.ToJson() ;
この時、MyOqlSet.ToJson()メソッドが機能します.
 
もしそうなら:
public string  Serialize(object obj )
{
  obj.ToJson() ;}
このとき、拡張方法が役立ちます.

15.Mvc 2デザインがあまりよくないところ


URLルーティングがそうである場合:{Controller}/{Action}/{uid}である.aspx,Actionメソッドはpublic ActionResult Add(string uid)でなければなりません
メソッドパラメータの名前はルーティング中のuidである.表意性がない異なるアクションuidの意味は異なる.ここは気分が悪いところです.
考えてみれば理由がある.URLパラメータとメソッドパラメータとが一致する.次のようになります.
Admin/Dept/List.aspx?Type=Allは、public ActionResult List(string uid,string Type)と一致します.
しかし、public ActionResult Add(string uid)が同時に存在する場合は、エラーが報告される.2つ目の不快な場所です

 16. C#実現できない方法


1.2つのIEnumerableを加算し、減算はa+b,a-b形式を採用する.
これは、リスト、リロード+、-演算子から継承されるクラスを実現することができます.
 

 17.保護されたメモリの読み取りまたは書き込みを試みます。これは通常、他のメモリが破損していることを示します。


プロジェクトで実際にこの問題に遭遇したのは,EmitによってNullオブジェクトに付与操作を行ったためである.

18.VS 2010ショートカット記録


次のエラー:Ctrl+Shift+F 12、再構築時に大量のエラーが発生する可能性があります.これにより、迅速に位置決めできます.
アノテーション、アノテーション解除:Ctrl+C、Ctrl+K
項目で選択した単語を参照する方法:Shift+Ctrl+F 12.偶然出会った.
VSでエラー自動ブレークポイントを設定:Ctrl+Alt+E.

19汎用パラメータを設定するテクニック


次の方法を定義します.
public MyOqlSet  LoadDictList( List> Source ){ return null ;}
このように定義する場合、入力パラメータも厳格なListでなければならない.以下はコンパイルに失敗する.
   new MyOqlSet().LoadDictList( new List>() ) ;
次のように定義された汎用コンストレイントに変更します.
public MyOqlSet LoadDictList( List Source) where T: IDictionary { return null ;}
できます.
 

20  Transaction.Current


現在のTransactionScopeのみが取得でき、DbTransactionについてはどうしようもなく、現在の接続でしか判断できません:conn.Transaction
 

21分散トランザクション


http://msdn.microsoft.com/zh-cn/library/system.transactions.transactionscope(VS.80).aspx
上の例では、間違いを食べてしまったという大きな間違いを犯しています.
異常が発生した場合、scopeはすべきではありません.Completeです.
正しい方法は次のとおりです.
using ( var tran = new TransactionScope())
{
  try
  {
    proc1();
    dbr.Insert.Execute();
 
    tran.Complete();
  }
  catch
  {
    Log();
  }
}
 
また、proc 1でトランザクションが使用されている場合、ストレージ中にトランザクションがコミットされてもdbr.Insertエラーが発生すると、ストレージ・プロシージャの操作もロールバックされます.そしてエラーを投げ出す.

22明示的な実装インタフェース


明示的に実装インタフェースは、string実装のIConvertibleのように直接呼び出すことはできません.呼び出す場合は、必要です:(「hello」as IConvertible).ToSingle(null) ;

23参照オブジェクトが渡されると、関数はその内容のみを変更でき、アドレスは変更できません。

        static void Main(string[] args)
        {
            var dict = new Dictionary<string, string>();
            update(dict);

            dict.All(o =>
                {
                    Console.WriteLine(o.Key + ":" + o.Value);
                    return true;
                });
        }

        private static void update(Dictionary<string, string> dict)
        {
            dict = new Dictionary<string, string>();
            dict["id"] = "1";
        }

上記dictのアドレスを再指定したため、Mainから何も出力されません.dictを初期化して削除すれば目的を達成できます.

24暗黙ベースクラス


Arrayは配列の暗黙的なベースクラスです
Value Typeは値タイプの暗黙ベースクラスです
Enumはenum列挙の暗黙的ベースクラスである
MulticastDelegateはdelegateのベースクラスです. 
 

25 MvcのサーバTransfer機能


サーバを使用できます.TransferRequestメソッドが実装されます.
 

26反射取得属性の場合、重複する属性値が得られる


タイプが属性を定義する場合、ベースクラスと同じ属性定義を使用し、newを使用して上書きされます.(ベースクラスの属性は虚ではない)、typeを使用している.GetProperties(BindingFlags.Public|BindingFlags.Instance)の場合、2つの属性値が得られます.サブクラス属性は前、ベースクラスは後です.
これを避けるには、System.ComponentModel.TypeDescriptor.GetPropertiesメソッド.ベースクラス属性がサブクラス属性と同じである場合、サブクラス属性が返されます.
 

27 Dos継続文字


http://www.newsmth.net/nForum/#!article/DOS/16444
Dos継続文字は:^
Jsの継続文字は
 

 28. バイナリのビット設定


バイナリはあるビットの設定を増加します:a|b;
バイナリ減少あるビット設定:a&(~b);
 

 29. FileSystemWatcher


 30. クラスはクラス呼び出しにのみ使用されます。


public class呼び出しクラス
{
private class呼び出しクラス{
internal voidメソッド(){}
  }
 
//勝手に呼び出しましょう.
}

31.インバータコヒーレンス


http://www.cnblogs.com/LoveJenny/archive/2012/03/13/2392747.html
結論:
は、Tが戻り値としてしかできないことを示す.
は、Tが入力値としてのみ使用可能であることを示す.
 

32. Web.コンフィグファイルのサイズに関する単位


一般的にKB、例えばmaxRequestLength
プログラム内のファイルサイズは、一般的にByte、例えばファイルのストリーム長です.

33.マルチスレッド


スレッドプールのスレッド数に影響を与える鍵は、SetMaxThreadsではなく、ThreadPoolのSetMinThreadsプロパティです.SetMaxThreadsは必要に応じて徐々に成長します.
QueueUserWorkItemとAction,FuncのBeginInvokeは同じである:スレッドプールSetMinThreadsの影響を受け,呼び出し後すぐにスレッドプールキューに入って実行を待ち,すぐに戻る.キューのサイズを制御できません.