ホームページ  >  記事  >  バックエンド開発  >  C# 学習記録: 高品質のコードの作成と組織の改善に関する提案 1 ~ 3

C# 学習記録: 高品質のコードの作成と組織の改善に関する提案 1 ~ 3

php是最好的语言
php是最好的语言オリジナル
2018-08-06 14:54:101717ブラウズ

提案 1: 文字列を正しく使用する

文字列

string str1 = "str1" + 9;
string str2 = "str2" + 9.ToString();

コードの最初の行では、ボックス化と文字列が生成されます。

## であり、コードの 2 行目では、内部で Number.FormatInt32

を使用する ToString() を使用しています。そのプロトタイプは

C# 学習記録: 高品質のコードの作成と組織の改善に関する提案 1 ~ 3

です。 NumberFormatInt32 はアンマネージ メソッドであり、その動作効率は通常の C# マネージ コードよりもはるかに高いため、コードの 2 行目の効率は 1 行目よりも高くなります。

マネージ コードとは別のブログの一節を引用します:

简单理解就是托管代码加了一个中间层,使其可以跨平台,不过效率会降低,而非托管代码就不会产生这样的情况

所以我们编写代码秉承一个原则:尽量减少装箱拆箱

StringBuilder

StringBuilder的效率来源于预先以非托管的方式分配内存,如果没有预先定义长度,默认长度为16,不够的时候会重新分配内存,依次加16的倍数,所以如果你提前知道字符串需要的最大长度,最好预先定义好,这样就不会频繁分配内存从而带来效率的降低

2、使用默认转型方法

这个建议的大体内容是尽量使用系统所带的转换类型的方法

例如 int.Parse  ToString()  System.Convert 等等

3、区别对待强转类型和as  is

两个类型之间转换有两种情况

1. 他们是父子类的关系: ChildType  =  (ChildType)ParentType

2.没有继承关系,或者继承同一个父类,这时候就需要重写强转方法

class FirstType
{
    public string Name { get; set; }
}

class SecondType
{
    public string Name { get; set; }
        
    public static explicit operator SecondType(FirstType firstType)
    {
        SecondType secondType = new SecondType() { Name = firstType.Name };
        return secondType;
    }
}

FirstType firstType = new FirstType() { Name = "张" };
SecondType secondType = (SecondType)firstType;

如果是继承的关系,为了效率推荐使用 ChildType = ParentType as ChildType

这个就更上面提到的,尽量使用系统方法的转换,而不是强制转换

我写Unity的时候有这样一个需求,右键点击装备的时候会使用,装备有Equipment,Weapon,我们需要判断是Equipment还是Weapon类型,它们都是继承Item类型,有两种方法可用:

Weapon weapon = item as Weapon;
if(weapon != null)
{
    //TODO 使用武器
}

if(item is Weapon)
{
    weapon weapon = item as Weapon;
    //TODO 使用武器
}

第一种方法只判断了一次类型,而第二种方法判断了两次类型

书上说as不能判断基元类型,但是经过我的测试发现书上写错了,as仅仅不能判断值类型,这里大家可以自己测试一下

C# 学習記録: 高品質のコードの作成と組織の改善に関する提案 1 ~ 3

C# 学習記録: 高品質のコードの作成と組織の改善に関する提案 1 ~ 3

相关文章:

C#学习记录:编写高质量代码改善整理建议4-8

C#学习记录:编写高质量代码改善整理建议9-15

マネージド コードとアンマネージド コード

誰もが知っているように、高レベルのコード私たちが通常のプログラミングに使用する言語は、コンピューターには認識されません。高級言語は、機械が理解して実行できるようになる前に、機械語に翻訳する必要があります。

標準 C/C では、コンパイル プロセスは次のようになります:

enter description here ソース コードは、まずプリプロセッサを通過してヘッダー ファイルとマクロを解析し、次にコンパイラを通過してアセンブリ コードを生成し、次にアセンブリを通過して機械語命令を生成し、最後にすべてのファイルを接続します。
このコンパイル方法の利点は、最終的にマシン コードが直接生成され、中間の実行環境を必要とせずにコンピュータで直接認識して実行できることですが、欠点は、異なるプラットフォームが異なるマシン コードを認識できるため、プログラムの相互互換性が失われることです。プラットフォームの機能が貧弱です。
Java言語では、ソースコードを直接機械語に変換するのではなく、中間コード(バイトコード)にコンパイルします。したがって、Java プログラムを実行するには、追加の JRE (Java Runtime Enviromental) 実行環境が必要です。JRE には JVM (Java Virtual Machine、Java 仮想マシン) が存在します。プログラムの実行時には、中間コードがさらに
となります。 Explain はマシン コードであり、マシン上で実行されます。 中間コードを使用する利点は、プログラムがよりクロスプラットフォームであり、コンパイル後はさまざまなデバイスで実行できることです。
マネージド/アンマネージドは Microsoft の .net フレームワークに固有の概念であり、アンマネージド コードはネイティブ コードとも呼ばれます。 Java のメカニズムと同様に、ソース コードはまず中間コード (MSIL、Microsoft Intermediate Language) にコンパイルされ、次に .net の CLR が中間コード
をマシン コードにコンパイルします。 C# と Java の違いは、Java は最初にコンパイルされてから解釈されるのに対し、C# は 2 回コンパイルされることです。
クロスプラットフォームの利点に加えて、ホスティング方法もプログラムのパフォーマンスに一定の影響を与えます。ただし、プログラムのパフォーマンスについてはこの記事の範囲を超えているため、ここでは詳しく説明しません。
さらに、.net では、C を管理拡張することもできるため、C コードも .net と CLR に依存して実行され、マネージド コードの利点が得られます。

以上がC# 学習記録: 高品質のコードの作成と組織の改善に関する提案 1 ~ 3の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。