সম্পাদনা: আমি ফলাফল একটি ব্লগ পোস্ট হিসাবে লিখেছি ।
সি # সংকলক কিছুটা যাদুকরভাবে COM ধরণের আচরণ করে। উদাহরণস্বরূপ, এই বিবৃতিটি সাধারণ দেখাচ্ছে ...
Word.Application app = new Word.Application();
... যতক্ষণ না আপনি বুঝতে পারছেন যে Application
এটি একটি ইন্টারফেস। একটি ইন্টারফেসে একটি কনস্ট্রাক্টর কল? Yoiks! এটি আসলে একটি কল Type.GetTypeFromCLSID()
এবং অন্যটিতে কল করে অনুবাদিত হয় Activator.CreateInstance
।
অতিরিক্তভাবে, সি # 4 এ, আপনি ref
পরামিতিগুলির জন্য অ-রেফার আর্গুমেন্টগুলি ব্যবহার করতে পারেন এবং সংকলক ফলাফলটি বাদ দিয়ে কেবল রেফারেন্স দিয়ে পাস করার জন্য একটি স্থানীয় ভেরিয়েবল যুক্ত করে:
// FileName parameter is *really* a ref parameter
app.ActiveDocument.SaveAs(FileName: "test.doc");
(হ্যাঁ, অনেকগুলি আর্গুমেন্ট অনুপস্থিত রয়েছে optionচ্ছিক পরামিতিগুলি কি সুন্দর নয়? :)
আমি সংকলক আচরণটি তদন্ত করার চেষ্টা করছি এবং আমি প্রথম অংশটি নকল করতে ব্যর্থ হচ্ছি। আমি কোনও সমস্যা ছাড়াই দ্বিতীয় অংশটি করতে পারি:
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
[ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")]
public interface Dummy
{
void Foo(ref int x);
}
class Test
{
static void Main()
{
Dummy dummy = null;
dummy.Foo(10);
}
}
আমি লিখতে সক্ষম হতে চাই:
Dummy dummy = new Dummy();
যদিও। স্পষ্টতই মৃত্যুদন্ড কার্যকর হওয়ার সময় তা হারাবে, তবে তা ঠিক আছে। আমি শুধু পরীক্ষা নিরীক্ষা করছি।
সংযুক্ত COM পিআইএ জন্য সংকলক দ্বারা যুক্ত অন্যান্য বৈশিষ্ট্যগুলি ( CompilerGenerated
এবং TypeIdentifier
) কৌশলটি মনে হচ্ছে না ... যাদু সস কি?
dynamic
... আমরা কেন স্থির / দৃ outside় টাইপিংয়ের অভ্যর্থনা করছি কেন এটি COM এর বাইরে গুরুত্বপূর্ণ।