これは記事の続きです。
»
開発→アンマネージコードからの.Netクラスのクロスプラットフォーム使用。 またはLinuxのIDispatchの類似物»
開発→ネイティブVKを介した1Cでの.Netクラスのクロスプラットフォーム使用。 またはLinuxでCOMを置き換えるそれ以来、デフォルトのパラメーターを持つメソッド、拡張メソッドの呼び出し、ジェネリックメソッドの型推論、IDynamicMetaObjectProvider(ExpandoObject、DynamicObject)を実装するオブジェクトのサポート、型メンバーへの同義語の追加、1Cでの非同期プログラミングのサポートを追加しました!
かつて、彼は
1Cで.Netの記事を書きました
。 HTTPClient、AngleSharpの例を使用します。 CSSセレクターを使用したJala承認を含むAngleSharpライブラリーを使用したサイトの便利な解析。 動的コンパイル拡張メソッド、汎用メソッド、デフォルトパラメータの使用例がありました。 そして最終的に、IReflectを使用したコードは、C#で実際とはかけ離れていました。 新しいバージョンでは、1Cコードをできる限りオリジナルに近づけようとしました。
C#の例を分析しましょう
var config = Configuration.Default.WithDefaultLoader().WithCookies();
1Cのアナログは次のとおりです。
AngleSharp=(.("AngleSharp")); Assembly=(AngleSharp.GetType()); .(Assembly.(),"","GetType");
いくつかの点に注意します。 建設:
document.QuerySelector<IHtmlAnchorElement>(rowSelector);
1Cでは次のようになります。
HtmlAnchorElement=((document.in(IHtmlAnchorElement.())).QuerySelector(rowSelector));
オブジェクトとジェネリック引数が保存されるDynamicObjectの子孫を作成するにはで予約語を使用し、TryInvokeMemberを介してメソッド名とパラメーターを取得し、目的のメソッドを見つけて実行します。
これまでのところ、ジェネリックについては、デフォルトのパラメーターと配列パラメーターを持つメソッドを実装していません。
ジェネリックの場合、そのような構造のタイプが派生します。
public K 3<K>(IList<K> param1, int param2, K param3)
1Cの例
List=("System.Collections.Generic.List`1[System.String]"); (.3(List.(),3,"3"));
タイプは、Ilistにつながるリストから推測され、結果をパラメーターのタイプ3と比較します。
1C 7.xb 8.xで.NETアセンブリを
使用することでしばしば批判され
ました。 外部コンポーネントの作成。1.クロスプラットフォームなし
2.ロシア語の同義語はありません。
まあ、クロスプラットフォームで、彼はMSを助け、クロスプラットフォームのコンポーネントを作りました。 また、類義語をタイプに追加できるようにしました。
AngleSharp=(.("AngleSharp")); Assembly=(AngleSharp.GetType()); .(Assembly.(),"","GetType");
同義語は拡張機能からも使用できます。 例:
public static class { public static string (this ,string Str) { return .()+" "+ Str; } }
今、あなたは呼び出すことができます:
ジェネリックメソッドの拡張機能を呼び出すこともできます。 制限に関する結論を含む。
ApiExtensions拡張メソッド:
public static Task<IDocument> ApiExtensions.NavigateAsync<TElement>(this TElement element) where TElement : IUrlUtilities, IElement;
IElementを制限するためにこのTElementが推測される型
doc=((HtmlAnchorElement.NavigateAsync()).Result);
ロードされたすべてのアセンブリを表示する方法をまだ見つけていません。 したがって、拡張機能の検索は、呼び出されたメソッドを持つ型が配置されているアセンブリで行われます。 秋に素晴らしい機能を備えたリリースが行われることを願っています。
また、インターフェイスを受信する短い記録を追加しました
代わりに
=(.(.(),"IEnumerable"));
として使用できます
=(.as("IEnumerable")); =(.GetEnumerator());
サンプルとソースは
ここからダウンロードでき
ます。次の記事では、
.Net Native VKによる1Cの非同期プログラミングで、1Cの非同期プログラミングについて説明します。