C#Clayオープンソースの動的言語動的フレームワークは、Java Script形式でオブジェクトを作成することができます。

C#Clayオープンソースの動的言語動的フレームワークは、Java Script形式でオブジェクトを作成することができます。

これにより、クラスを定義することなく、必要なオブジェクトを構築できます。

最后更新 2022/07/15 21:33
黑哥聊dotNet
预计阅读 3 分钟
分类
.NET
标签
.NET C# オープンソースソース

プロフィール:プロフィール

ClayはExpandoObjectに非常に似ており、ExpandoObjectの拡張版と見ることができる。クラスを定義することなく、必要なオブジェクトを構築することができます。ClayはExpandoObjectよりも柔軟な構文サポートを提供しており、C#コードをJava Scriptコードと同じように記述でき、複雑なオブジェクトを複数レベルで構築することもできます。

複数の方法でオブジェクトを初期化

最も単純なオブジェクトの構築と初期化

dynamic New = new ClayFactory();
var person = New.Person();
person.FirstName = "Louis";
person.LastName = "Dejardin";

**** ここでのPersonは、実際のクラスや構造体ではありません。Personクラスを定義することなく、FirstNameとLastNameプロパティを持つオブジェクトを構築しました。

2、インデックスを使用した初期化

var person = New.Person();
person["FirstName"] = "Louis";
person["LastName"] = "Dejardin";

3、匿名オブジェクトを使用した初期化

var person = New.Person(new {
    FirstName = "Louis",
    LastName = "Dejardin"
});

名前付きパラメータを使用した初期化

var person = New.Person(
    FirstName: "Louis",
    LastName: "Dejardin"
);

5.チェーンの初期化

var person = New.Person()
               .FirstName("Louis")
               .LastName("Dejardin");

プロパティの読み取り方法

person.FirstName
person[“FirstName”]
person.FirstName()

上記の3つはすべてFirstNameプロパティへのアクセスであり、等価です。 多种多样的初始化对象和读取属性的方式,让dynamic变得更加灵活. 这些都是ExpandoObject所做不到的。

魔法の配列を作る

Java Scriptスタイルの配列を作成できます。

dynamic New = new ClayFactory();
          var people = New.Array(
              New.Person().FirstName("Louis").LastName("Dejardin"),
              New.Person().FirstName("Bertrand").LastName("Le Roy")
          );
  1. 構築されたArray、Countプロパティを使用した構築されたArray
Console.WriteLine("Count = {0}", people.Count);
  1. 索引でアクセス可能
Console.WriteLine("people[0].FirstName = {0}", people[0].FirstName);
  1. Foreachトラバースのサポート
foreach (var person in people) {
     Console.WriteLine("{0} {1}", person.FirstName, person.LastName);
}
  1. オブジェクトにArrayプロパティを簡単かつ簡単に追加
person.Aliases("bleroy", "BoudinFatal");

这里是为person这个动态对象添加了一个Array属性,属性的名字叫Aliases, 所以这里Aliases可以替换成任何名称,并没有特定含义。

以下のコードは上記のコードと等価です。

persons.Aliases1(new[] {"bleroy", "BoudinFatal"});
  1. 配列の要素型は通常の型ではなく動的です。

因为Array元素的类型是dynamic, 所以可以有这样的 Array:

var people = New.Array(
     New.Person().FirstName("Louis").LastName("Dejardin"),
     "Peter"
);

オブジェクトに対するメソッドの動的追加

和 ExpandoObject 一样,你也可以为其扩展方法,只是方法调用的时候,需要多添加一个(). これは、Clayがオブジェクトのプロパティにアクセスするためにをサポートしていることが原因である可能性があります。

var person = New.Pserson();
person.FirstName = "Louis";
person.LastName = "Dejardin";
person.SayFullName = new Func<string, string>(x => person.FirstName + person.LastName + x);

Console.WriteLine(person.SayFullName()(" Here!"));

動的な実装インタフェース

このインターフェイスを定義し、動的型付けでオブジェクトを作成し、このオブジェクトがインターフェイスを実装していると仮定すると、これは不可能に見えます。クレイならできる!

public interface IPerson
{
       string FirstName { get; set; }
       string LastName { get; set; }
}

dynamic New = new ClayFactory();
var people = New.Array(
New.Person().FirstName("Louis").LastName("Dejardin"),
New.Person().FirstName("Bertrand").LastName("Le Roy"));
IPerson lou = people[0];
var fullName = lou.FirstName + " " + lou.LastName;

Clayの背景

想通过一种构建一个可以自由扩展的,灵活的dynamic对象来一劳永逸的解决问题,这就是 Clay 的初衷。

Clayは独立したオープンソースプロジェクトであり、その全能性は多くのクラス定義やリフレクションコードを簡素化するのに役立ちます。

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同分类 / 同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读