ホームページ  >  記事  >  バックエンド開発  >  C# のメタデータ

C# のメタデータ

WBOY
WBOYオリジナル
2024-09-03 15:30:18433ブラウズ

メタデータ内の C# は、プログラムを記述するバイナリ情報として定義され、この情報は共通言語ランタイムのポータブル実行可能ファイルまたはメモリに保存されます。ポータブル実行可能ファイルからコードをコンパイルすると、ファイルのもう 1 つの領域部分にメタデータが挿入され、このコードはすべて MSIL 形式 (Microsoft 中間言語) に変換され、コードはファイルの別のパーティション部分に移動されます。アセンブリ内で定義および参照されるすべてのデータ型とデータ メンバーは、メタデータ内に配置されます。ランタイムで C# コードを実行しているときに、メモリからメタデータがロードされます。 C# メタデータの主な目的は、クラス、データ メンバー、継承、クラスのデータ型などに関する情報を知ることです。ファイル内のメタデータは、テーブルとヒープのデータ構造で構成されます。

メタデータの使用

メタデータの用途を以下に示します:

  • 名前、可視性、基本クラス、インターフェイスなどのアセンブリ データ型について説明します。
  • メソッド、フィールド、プロパティ、イベント、ネストされた型などのデータ メンバーを提供します。
  • 型とメンバーを変更する要素の追加説明も提供します。
  • 名前、バージョン、公開鍵などの ID を持ちます。
  • これはシンプルなプログラミング モデルの鍵であり、IDL (インターフェイス定義言語) ファイルやヘッダー ファイルの必要性を排除します。

メタデータの種類

メタデータの種類を以下に示します。

C# のメタデータ

メタデータの役割

メタデータの役割を以下に示します:

C# のメタデータ

メタデータは C# でどのように機能しますか?

C# メタデータは、データに関するデータを認識して機能しました。

構文:

using packageName;//used for insert the packages in C#
public class MyApp
{
public static int Main()
{
//data types
Console.WriteLine("Required Message");
}
//user defined methods for other logics
}

C# のメタデータの例

以下は C# のメタデータの例です:

例 #1

3 つの数字の掛け算

コード: Multiplication.cs

using System; //Used for declaring the package or used for importing existed packege
public class Multiplication//declaring the class
{
public static int Main ()// main method for displaying the output
{
//declaring and defining the varaiables
int x = 50;
int y = 20;
int z=30;
//Printing the output of the multiplication of 2 numbers
Console.WriteLine ("Multiplication of {0},{1} and {2} is {3}",x,y,z,multiplication(x,y,z));
return 0;
}
public static int multiplication(int x, int y, int z)// multiplication() method implemention
{
return (x * y*z);// return multiplication of 3 numbers
}
}

出力:

C# のメタデータ

説明:

  • この説明でわかるように、実際のデータを見ることができます。メタデータやバイナリ データが必要な場合は、機械が生成したコード内のコンパイラを見ることができます。これは常に暗号化されており、人間には理解できません。

例 #2

正方形の面積

コード: SquareOfArea.cs

using System; //Used for declaring the package or used for importing existed packege
public class SquareArea//declaring the class
{
public static int Main ()// main method for displaying the output
{
//declaring and defining the varaiables
int x = 50;
//Printing the output of the areaOfSquare
Console.WriteLine ("Area of Square is {0}",areaOfSquare(x));
return 0;
}
public static int areaOfSquare(int x)// multiplication() method implemention
{
return (x*x);// return area Of Square
}
}

出力:

C# のメタデータ

説明:

  • この説明でわかるように、実際のデータを見ることができます。メタデータやバイナリ データが必要な場合は、機械が生成したコード内のコンパイラを見ることができます。これは常に暗号化されており、人間には理解できません。

例 #3

データを含む複数のクラス

コード: MultiData.net

using System; //Used for declaring the package or used for importing existed packege
using System.Collections.Generic; //Used for declaring the package or used for importing existed packege
public class Entity {//declaring the class
//setters and getters for set and get the data
public string Name {get;set;}
public string Uses {get;set;}
//toString method to overide predefined String data
public override string ToString() {
string output1=string.Format("My Name is {0}", Name);
string output2=string.Format(" He is: {0}", Uses);
return output1+output2;
}
}
//declaring interface with reference class extention
public interface IMeta<T> where T: class {
//setters and getter for set and get the data
T Inner {get;set;}
stringMetaData {get;set;}
}
//declaring interface with reference class extention
public interface IStorage<T> where T: class {
//method definition for save the data
T Save();
}
//declaring the class by extending Imeta and IStorage interfaces
public class Meta<T> : IMeta<T>, IStorage<T>
where T: class
{
//creating a generic dictionary variable
private static Dictionary<T, Meta<T>> _stash = new Dictionary<T, Meta<T>>();
//constructor for the class
public Meta(T item) {
Inner = item;
}
//setters and getters for set and get the data
public T Inner {get;set;}
public string MetaData {get;set;}
//method implementation for operator
public static implicit operator T(Meta<T> meta) {
if (! _stash.ContainsKey(meta.Inner))
_stash.Add(meta.Inner, meta);
returnmeta.Inner;
}
public static implicit operator Meta<T>(T item) {
try {
return _stash[item];
} catch {
return null;
}
}
//save the data to repository
public T Save() {
return this;
}
}
//declaring the class
public static class MetaHelper {
//method definition for return the data
public static IMeta<T>GetMeta<T>(T item) where T: class {
return (Meta<T>)item;
}
//method definition for store the data
public static IStorage<T>GetStorage<T>(T item) where T: class {
return (Meta<T>)item;
}
}
//declaring the class
public class Program
{
//Entity type for createEntity method definition with 2 arguments
public static Entity CreateEntity(string name, string uses) {
//creating a variable
var result = new Meta<Entity>(new Entity(){ Name = name, Uses = uses });
//adding data to the variable that is metadata
result.MetaData = "Paramesh";
return  result;
}
//test method to test the data
public static void Main()
{
//Passing the values to createEntity method
varent = CreateEntity("Amardeep", "Good Person");
//types casting ent into Meta class
Meta<Entity> meta = (Meta<Entity>)ent;
//creating variables
varimeta = MetaHelper.GetMeta<Entity>(ent);
varistore = MetaHelper.GetStorage<Entity>(ent);
var stored = istore.Save();
//Displaying output
Console.WriteLine("MetaData: {0} {1} {2} {3}", imeta.MetaData, imeta.Inner.Name, stored.Name, stored.Uses);
Console.WriteLine(ent);
if (meta != null) Console.WriteLine(meta.MetaData);
elseConsole.WriteLine("This is not a meta type");
}
}

出力:

C# のメタデータ

説明:

  • この説明でわかるように、実際のデータを見ることができます。メタデータやバイナリ データが必要な場合は、機械が生成したコード内のコンパイラを見ることができます。これは常に暗号化されており、人間には理解できません。

結論

C# のメタデータは、データに関するデータを知るために使用されます。これはすべてバイナリ形式に暗号化されており、人間には理解できないため、バイナリ コードを通常のコードに変換してロジックを分析しています。

以上がC# のメタデータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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