একটি টাইপ থেকে একটি নতুন বস্তু উদাহরণ পেতে

এক কম্পাইল-টাইম এ অবজেক্টের প্রকারকে সর্বদা জানতে পারে না, তবে প্রকারের একটি উদাহরণ তৈরি করতে হতে পারে। কিভাবে আপনি একটি টাইপ থেকে একটি নতুন বস্তু উদাহরণ পেতে পারি?

0
আপনি ArcGIS 10 মধ্যে বেস স্তর সম্পর্কে কথা বলছেন?
যোগ লেখক Devdatta Tengshe, উৎস
আমি মনে করি তিনি BaseCustomLayer বর্গ ব্যবহার করে একটি কাস্টম স্তর প্রয়োগ সম্পর্কে কথা বলছেন।
যোগ লেখক Reed Copsey, উৎস

13 উত্তর

আপনি কি BaseCustomGlobeLayer

Update: I just tried that and it doesn't work. I then derived from BaseCustomLayer then implemented IGraphicsContainer3D and was able to add it to the scene without getting an error.

2
যোগ
এখানে ফলোআপ প্রশ্নটি তৈরি করা হয়েছে gis.stackexchange.com/questions/18301/… এ ইন্টারফেসগুলি
যোগ লেখক saint_groceon, উৎস
ক্লেসগুলি দেখুন যেগুলি ইলিয়ের এভেন্টসগুলি প্রয়োগ করে এটি প্রদর্শিত হয় যে তাদের সবগুলি একটি আউটবাউন্ড ইন্টারফেস (গ্লোব এবং 3D লেয়ার ছাড়া) হিসাবে কাজ করে। একটি ভাল প্রশ্ন হবে: কিভাবে কাস্টম ক্লাসের জন্য একাধিক বহির্গামী ইন্টারফেসগুলি সি # এ প্রয়োগ করব?
যোগ লেখক saint_groceon, উৎস
আমি মনে করি যে একটি অপ্রচলিত আউটবাউন্ড ইন্টারফেসের সাথে সম্পর্কিত আরেকটি সমস্যা। আর্কাম্যাপে বৈশিষ্ট্যলয়ার কোক্লাস একটি বহির্গামী ইন্টারফেস হিসাবে ILayerEvents বাস্তবায়ন আমার মনে হয় graphicslayer3d এর জন্য ডকুমেন্ট ভুল এবং ILayerEvents বহির্ভূত হওয়া উচিত কারণ এটি হল ফ
যোগ লেখক saint_groceon, উৎস
@ রাইড কপসি, OMD এ দেখে আমি দেখতে পাই যে GraphicsLayer3D একটি আউটবাউন্ড ইন্টারফেস হিসাবে IActiveViewEvents বাস্তবায়ন আমি সন্দেহ করি যে আইটেমটি মুছে ফেলা হয়েছে গ্রাফিক্স অপসারণ করা হয় যখন আগুনের প্রয়োজন।
যোগ লেখক saint_groceon, উৎস
আমি নিশ্চিত না, যতক্ষণ না আমি চেষ্টা করেছি। আপনি ঠিক আছেন - এটি ArcScene এর সাথে কাজ করে না।
যোগ লেখক saint_groceon, উৎস
IGraphicsContainer3D কি হিসাবে প্রদর্শিত হবে। ধন্যবাদ!
যোগ লেখক Thejesh GN, উৎস
শুধুমাত্র ArcGlobe এর জন্য নয় কি? যে কাজ ArcScene হিসাবে ভাল?
যোগ লেখক Reed Copsey, উৎস
@ ডিবিকার আপনি কি শেষ পর্যন্ত কাজ করতে পেরেছিলেন? আমি এই চেষ্টা করেছি, এবং এটি ত্রুটি ছাড়া যোগ করার সময়, আচরণ "পরিষ্কার" যাই হোক না কেন (ie: গ্রাফিক্স IGraphicsContainer3D কখনও মুছে ফেলা হবে না, ইত্যাদি) ...
যোগ লেখক Reed Copsey, উৎস
@ ক্রাক কিউকেন্ড্ল আমি সম্পূর্ণ আইএক্টিভ ভিউইভেন্টস (এবং আইএলএইএইএইএইচেন্টস) বাস্তবায়ন করেছি এবং এখনও একই বিজোড় আচরণ ...
যোগ লেখক Reed Copsey, উৎস
এটা আমি গ্রাফিক্স সরানো করছি না যে না - এমনকি মিথ্যা প্রদর্শনের জন্য স্তর দৃশ্যমান সেটিং আইটেম পরিষ্কার করতে না।
যোগ লেখক Reed Copsey, উৎস

এই সমস্যার একটি বাস্তবায়ন প্রকারের প্যারামিটার কম কন্সট্রাকটর কল করার চেষ্টা করা হয়:

public static object GetNewObject(Type t)
{
    try
    {
        return t.GetConstructor(new Type[] { }).Invoke(new object[] { });
    }
    catch
    {
        return null;
    }
}

এখানে একটি অভিন্ন পদ্ধতি, একটি জেনেরিক পদ্ধতিতে অন্তর্ভুক্ত:

public static T GetNewObject()
{
    try
    {
        return (T)typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { });
    }
    catch
    {
        return default(T);
    }
}
0
যোগ
ব্যতিক্রম প্রোগ্রাম চালিত? এই কন্সট্রাকটরগুলি নির্ধারণ করার জন্য কেবলমাত্র টাইপের প্রতিফলন করার ক্ষেত্রে এটি একটি খুব খারাপ বাস্তবায়ন বলে মনে হচ্ছে।
যোগ লেখক Firoso, উৎস

মূল কোডের মধ্যে অ্যাক্টিভেটর শ্রেণী সিস্টেম নামস্থানটি বেশ শক্তিশালী।

কনস্ট্রাক্টরের প্যারামিটারগুলি পাস করার জন্য এবং এইরকম অনেক বেশি ওভারলোড রয়েছে। এখানে ডকুমেন্টেশন দেখুন:

http://msdn.microsoft.com/en- মার্কিন / লাইব্রেরি / system.activator.createinstance.aspx ?

বা (নতুন পথ)

https://docs.microsoft.com/en- মার্কিন / dotnet / API / system.activator.createinstance ?

এখানে কিছু সহজ উদাহরণ:

ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

ObjectType instance = (ObjectType)Activator.CreateInstance("MyAssembly","MyNamespace.ObjectType");
0
যোগ
অবশেষে এটি পাওয়া, কিন্তু দ্বিতীয় কল সঠিক না, একটি উদ্ধৃতি এবং পরামিতি অনুপস্থিত, হতে হবে: অবজেক্ট টাইপ উদাহরণ = (অবজেক্ট টাইপ) Activator.CreateInstance ("MyAssembly", "MyNamespa এবং zwnj; CE.ObjectType");
যোগ লেখক kevinc, উৎস
আপনি চাইলে বস্তুর প্রকৃত প্রকারটি পেতে 'আনরপ ()' কল করতে চান: কংক্রিট টাইপ উদাহরণ = (কংক্রিট টাইপ) অ্যাক্টিভেটর। ক্যাটেস্ট ইন্সট্যান্স (অবজেক্ট টাইপ) .অনভারপ ();
যোগ লেখক Ε Г И І И О, উৎস

প্রতিফলন ব্যবহার ছাড়াই:

private T Create() where T : class, new()
{
    return new T();
}
0
যোগ
আপনি কম্পাইল সময় সব সম্ভাব্য ধরনের জানি, কিন্তু আপনি wich বাস্তবায়ন রানটাইম এ ব্যবহৃত হবে না জানি না।
যোগ লেখক Robert P., উৎস
যদি আপনি জেনেরিক ক্লাস এবং কারখানায় ইন্টারফেসের সাথে কাজ করেন, তাহলে ইন্টারফেস প্রয়োগকারী প্রকারগুলি instanciated করা উচিত হতে পারে পরিবর্তিত হতে পারে
যোগ লেখক Robert P., উৎস
একটি নতুন টি (); যদি ব্যর্থ হয় তাহলে প্যারাসাইলেটর কন্সট্রাক্টরের সাথে রেফারেন্স টাইপ হয় না, তবে এই পদ্ধতিটি টি রেফারেন্স টাইপ এবং কন্সট্রাক্টরকে নিশ্চিত করার জন্য কনট্রেনটিস ব্যবহার করে।
যোগ লেখক Robert P., উৎস
তাই টি রানটাইম এ পরিবর্তিত হতে পারে। আপনি deríved ধরনের সঙ্গে কাজ যদি দরকারী।
যোগ লেখক Robert P., উৎস
@RobertP। আপনি রানটাইম এ নতুন প্রকার তৈরি করতে পারেন। কোন নিয়ম নেই যে আপনি কম্পাইল সময় সব ধরনের জানেন। এবং আমি জেনেটিক্স সঙ্গে মানে না। আপনি সম্পূর্ণ নতুন ধরনের তৈরি করতে পারেন, এবং রানটাইমে সব ক্ষেত্র, বৈশিষ্ট্য এবং পদ্ধতি ইত্যাদি যোগ করতে পারেন। এমন একটি সাধারণ মামলাও রয়েছে যেখানে আপনি একটি সমাবেশের একটি উদাহরণ তৈরি করতে চান যেখানে কম্পাইলের সময় জানা যায় না। যে বরং সাধারণ হয়
যোগ লেখক AnorZaken, উৎস
কিভাবে টি রানটাইম এ পরিবর্তিত হতে পারে? ডিজাইন করার জন্য টাইপ করার সময় টি> টি> <�তৈরি করতে হবে না?
যোগ লেখক Kyle Delaney, উৎস
কিভাবে এই দরকারী? আপনি ইতিমধ্যে যে পদ্ধতি কল করতে টাইপ জানতে হবে, এবং যদি আপনি একটি বিশেষ পদ্ধতি ছাড়া এটি নির্মাণ করতে পারেন টাইপ জানতে হলে
যোগ লেখক Kyle Delaney, উৎস

আমি এই প্রশ্নটি জুড়ে পারি কারণ আমি নির্বিচারে ক্লাসের জন্য একটি সাধারণ CloneObject পদ্ধতি (একটি ডিফল্ট কন্সট্রাকটর সহ) বাস্তবায়ন করতে চেয়েছিলাম

জেনেরিক পদ্ধতিতে আপনি টাইপটি প্রয়োগ করতে পারেন তা নতুন ()।

Public Function CloneObject(Of T As New)(ByVal src As T) As T
    Dim result As T = Nothing
    Dim cloneable = TryCast(src, ICloneable)
    If cloneable IsNot Nothing Then
        result = cloneable.Clone()
    Else
        result = New T
        CopySimpleProperties(src, result, Nothing, "clone")
    End If
    Return result
End Function

অ-জেনেরিকের অনুমানের সঙ্গে টাইপের একটি ডিফল্ট কন্সট্রাকটর রয়েছে এবং ধরা যাক একটি ব্যতিক্রম যদি এটি না হয়।

Public Function CloneObject(ByVal src As Object) As Object
    Dim result As Object = Nothing
    Dim cloneable As ICloneable
    Try
        cloneable = TryCast(src, ICloneable)
        If cloneable IsNot Nothing Then
            result = cloneable.Clone()
        Else
            result = Activator.CreateInstance(src.GetType())
            CopySimpleProperties(src, result, Nothing, "clone")
        End If
    Catch ex As Exception
        Trace.WriteLine("!!! CloneObject(): " & ex.Message)
    End Try
    Return result
End Function
0
যোগ

জেনেরিক হবে না <�কোড> টি টি = নতুন টি (); </কোড> কাজ?

0
যোগ
প্রকৃতপক্ষে, এটি একটি জেনেরিক ক্লাস / পদ্ধতিতে হবে, কিন্তু প্রদত্ত "প্রকার" জন্য নয়।
যোগ লেখক Brady Moritz, উৎস
ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

অ্যাক্টিভেটর ক্লাসে একটি জেনেরিক ভ্যারিয়েন্ট রয়েছে যা এইটিকে আরও সহজ করে তোলে:

ObjectType instance = Activator.CreateInstance();
0
যোগ
@ কেভিন অবশ্যই। এই ধরনের একটি অপারেশন কি করতে পারি? </ I> একটি স্থায়ীভাবে টাইপ করা ভাষাতে কাজ করে কারণ এটি অর্থপূর্ণ নয়। আপনি অজানা প্রকারের বস্তুর উপর পদ্ধতিগুলি আমন্ত্রণ করতে পারবেন না। এই সময়ে (= এই উত্তর লেখার সময়) C#ডায়নামিক </ কোড> নির্মাণ করা হয়েছে এই ধরনের গঠন অনুমোদন করে কিন্তু সর্বাধিক উদ্দেশ্যে এই উত্তরটি এখনও এটি জুড়েছে।
যোগ লেখক Konrad Rudolph, উৎস
@ অনারজেন আমার মন্তব্য রানটাইম এ ধরনের তৈরি সম্পর্কে কিছুই বলে না। অবশ্যই আপনি এটি করতে পারেন, কিন্তু আপনি একই প্রেক্ষাপটে স্থিরভাবে ব্যবহার করতে পারবেন না (আপনি অবশ্যই একটি সম্পূর্ণ স্থায়ীভাবে সংকলিত প্রোগ্রাম হোস্ট করতে পারেন)। যে আমার সমস্ত মন্তব্য বলছে এর।
যোগ লেখক Konrad Rudolph, উৎস
এটি রানটাইম টাইপ টি </ কোড> এর জন্য কাজ করে না।
যোগ লেখক Kevin P. Rice, উৎস
@ কনড্রুদলফ এহ দুঃখিত, "এই ধরনের অপারেশন" এর অর্থ বোঝার অর্থ হচ্ছে যে কেবলমাত্র রানটাইমে পরিচিত একটি প্রকারের তাত্পর্যপূর্ণ; পরিবর্তে একটি জেনেরিক টাইপ পরামিতি হিসাবে একটি রানটাইম টাইপ ব্যবহার করে অর্থ।
যোগ লেখক AnorZaken, উৎস
@ কনড্রুদোলোফ, বেশ সত্য নয়। প্রথম গ * # i> আপনাকে রানটাইমে নতুন প্রকারের তৈরি করতে দেয়। আপনি তাদের কাছে একটি স্থায়ীভাবে নিরাপদভাবে - এ কিছু কল করতে পারবেন না সুতরাং হ্যাঁ, আপনি অর্ধেক সঠিক কিন্তু আরো বাস্তবিকভাবে আপনি এই প্রয়োজন যখন আপনি রানটাইম এ সমাবেশগুলি লোড, যার মানে টাইপ কম্পাইল সময় পরিচিত হয় না। আপনি এই করতে পারে না যদি সি # গুরুতরভাবে সীমাবদ্ধ হবে। আমি বলতে চাচ্ছি আপনি শুধু নিজেকে প্রমাণিত: কিভাবে আরেকটি অ্যাক্টিভেটর পদ্ধতি যা একটি টাইপ-উদাহরণ কাজ লাগে? যখন মাইক্রোসফট অ্যাক্টিভেটর ক্লাসটি লিখেছিল তখন তাদের ভবিষ্যতের কোনও কম্পোনেন্ট-টাইম জ্ঞান নেই যেগুলি ব্যবহারকার
যোগ লেখক AnorZaken, উৎস

কম্পাইল এক্সপ্রেশন সেরা উপায়! (কর্ম সঞ্চালনের জন্য বারবার রানটাইমে উদাহরণ তৈরি করুন)।

static readonly Func YCreator = Expression.Lambda>(
   Expression.New(typeof(Y).GetConstructor(Type.EmptyTypes))
 ).Compile();

X x = YCreator();

পরিসংখ্যান (2012):

    Iterations: 5000000
    00:00:00.8481762, Activator.CreateInstance(string, string)
    00:00:00.8416930, Activator.CreateInstance(type)
    00:00:06.6236752, ConstructorInfo.Invoke
    00:00:00.1776255, Compiled expression
    00:00:00.0462197, new

পরিসংখ্যান (2015, .NET 4.5, x64):

    Iterations: 5000000
    00:00:00.2659981, Activator.CreateInstance(string, string)
    00:00:00.2603770, Activator.CreateInstance(type)
    00:00:00.7478936, ConstructorInfo.Invoke
    00:00:00.0700757, Compiled expression
    00:00:00.0286710, new

পরিসংখ্যান (2015, .নেট 4.5, x86):

    Iterations: 5000000
    00:00:00.3541501, Activator.CreateInstance(string, string)
    00:00:00.3686861, Activator.CreateInstance(type)
    00:00:00.9492354, ConstructorInfo.Invoke
    00:00:00.0719072, Compiled expression
    00:00:00.0229387, new

পরিসংখ্যান (2017, LINQPad 5.22.02 / x64 / .NET 4.6):

    Iterations: 5000000
    No args
    00:00:00.3897563, Activator.CreateInstance(string assemblyName, string typeName)
    00:00:00.3500748, Activator.CreateInstance(Type type)
    00:00:01.0100714, ConstructorInfo.Invoke
    00:00:00.1375767, Compiled expression
    00:00:00.1337920, Compiled expression (type)
    00:00:00.0593664, new
    Single arg
    00:00:03.9300630, Activator.CreateInstance(Type type)
    00:00:01.3881770, ConstructorInfo.Invoke
    00:00:00.1425534, Compiled expression
    00:00:00.0717409, new

সম্পূর্ণ কোড:

static X CreateY_New()
{
    return new Y();
}

static X CreateY_New_Arg(int z)
{
    return new Y(z);
}

static X CreateY_CreateInstance()
{
    return (X)Activator.CreateInstance(typeof(Y));
}

static X CreateY_CreateInstance_String()
{
    return (X)Activator.CreateInstance("Program", "Y").Unwrap();
}

static X CreateY_CreateInstance_Arg(int z)
{
    return (X)Activator.CreateInstance(typeof(Y), new object[] { z, });
}

private static readonly System.Reflection.ConstructorInfo YConstructor =
    typeof(Y).GetConstructor(Type.EmptyTypes);
private static readonly object[] Empty = new object[] { };
static X CreateY_Invoke()
{
    return (X)YConstructor.Invoke(Empty);
}

private static readonly System.Reflection.ConstructorInfo YConstructor_Arg =
    typeof(Y).GetConstructor(new[] { typeof(int), });
static X CreateY_Invoke_Arg(int z)
{
    return (X)YConstructor_Arg.Invoke(new object[] { z, });
}

private static readonly Func YCreator = Expression.Lambda>(
   Expression.New(typeof(Y).GetConstructor(Type.EmptyTypes))
).Compile();
static X CreateY_CompiledExpression()
{
    return YCreator();
}

private static readonly Func YCreator_Type = Expression.Lambda>(
   Expression.New(typeof(Y))
).Compile();
static X CreateY_CompiledExpression_Type()
{
    return YCreator_Type();
}

private static readonly ParameterExpression YCreator_Arg_Param = Expression.Parameter(typeof(int), "z");
private static readonly Func YCreator_Arg = Expression.Lambda>(
   Expression.New(typeof(Y).GetConstructor(new[] { typeof(int), }), new[] { YCreator_Arg_Param, }),
   YCreator_Arg_Param
).Compile();
static X CreateY_CompiledExpression_Arg(int z)
{
    return YCreator_Arg(z);
}

static void Main(string[] args)
{
    const int iterations = 5000000;

    Console.WriteLine("Iterations: {0}", iterations);

    Console.WriteLine("No args");
    foreach (var creatorInfo in new[]
    {
        new {Name = "Activator.CreateInstance(string assemblyName, string typeName)", Creator = (Func)CreateY_CreateInstance},
        new {Name = "Activator.CreateInstance(Type type)", Creator = (Func)CreateY_CreateInstance},
        new {Name = "ConstructorInfo.Invoke", Creator = (Func)CreateY_Invoke},
        new {Name = "Compiled expression", Creator = (Func)CreateY_CompiledExpression},
        new {Name = "Compiled expression (type)", Creator = (Func)CreateY_CompiledExpression_Type},
        new {Name = "new", Creator = (Func)CreateY_New},
    })
    {
        var creator = creatorInfo.Creator;

        var sum = 0;
        for (var i = 0; i < 1000; i++)
            sum += creator().Z;

        var stopwatch = new Stopwatch();
        stopwatch.Start();
        for (var i = 0; i < iterations; ++i)
        {
            var x = creator();
            sum += x.Z;
        }
        stopwatch.Stop();
        Console.WriteLine("{0}, {1}", stopwatch.Elapsed, creatorInfo.Name);
    }

    Console.WriteLine("Single arg");
    foreach (var creatorInfo in new[]
    {
        new {Name = "Activator.CreateInstance(Type type)", Creator = (Func)CreateY_CreateInstance_Arg},
        new {Name = "ConstructorInfo.Invoke", Creator = (Func)CreateY_Invoke_Arg},
        new {Name = "Compiled expression", Creator = (Func)CreateY_CompiledExpression_Arg},
        new {Name = "new", Creator = (Func)CreateY_New_Arg},
    })
    {
        var creator = creatorInfo.Creator;

        var sum = 0;
        for (var i = 0; i < 1000; i++)
            sum += creator(i).Z;

        var stopwatch = new Stopwatch();
        stopwatch.Start();
        for (var i = 0; i < iterations; ++i)
        {
            var x = creator(i);
            sum += x.Z;
        }
        stopwatch.Stop();
        Console.WriteLine("{0}, {1}", stopwatch.Elapsed, creatorInfo.Name);
    }
}

public class X
{
  public X() { }
  public X(int z) { this.Z = z; }
  public int Z;
}

public class Y : X
{
    public Y() {}
    public Y(int z) : base(z) {}
}
0
যোগ
উদাহরণ সম্ভবত?
যোগ লেখক ajeh, উৎস
এটি কি এখনও ব্যবহার করা হয় যখন আপনি জানেন না কি টাইপ X হয়?
যোগ লেখক ajeh, উৎস
এছাড়াও TypeDescriptor.CreateInstance আছে (Type stackoverflow.com/a/17797389/1242 দেখুন) যা টাইপ ডেসক্রিপটার ব্যবহার করে দ্রুততর হতে পারে .AddProvider
যোগ লেখক Lars Truijens, উৎস
@ সার্জ-টিএম নং, যদি টাইপ এক্সটি রানটাইম টাইপ </ কোড> টাইপ করে কাজ করবে না।
যোগ লেখক NetMage, উৎস
@জেহ হ্যাঁ। টাইপ টাইপ (টি) টাইপ করুন। GetType (..)
যোগ লেখক Serj-Tm, উৎস
সমস্ত পরিসংখ্যান জন্য +1! আমি সত্যিই এই মুহূর্তে কর্মক্ষমতা এই ধরনের প্রয়োজন নেই, কিন্তু এখনও খুব আকর্ষণীয়। :)
যোগ লেখক AnorZaken, উৎস

তার সুন্দর সহজ অনুমান করুন যে আপনার ক্লাসের নাম কার এবং নামস্থান হল যানবাহন </কোড>, তারপর প্যারামিটারকে vehicles.car হিসাবে টাইপ করুন car type </কোড>। এই মত আপনি গতিশীল কোনো ক্লাস কোন দৃষ্টান্ত তৈরি করতে পারেন।

public object GetInstance(string strNamesapace)
{         
     Type t = Type.GetType(strNamesapace); 
     return  Activator.CreateInstance(t);         
}

যদি আপনার সম্পূর্ণ যোগ্য নামকরণ (অর্থাৎ , Vehicles.Car এই ক্ষেত্রে) অন্য একটি সমাবেশে, Type.GetType null হবে। এই ক্ষেত্রে, আপনার সমস্ত সমাহারগুলির মাধ্যমে লুপ আছে এবং টাইপ করুন । যে জন্য আপনি নীচের কোড ব্যবহার করতে পারেন

public object GetInstance(string strFullyQualifiedName)
{
     Type type = Type.GetType(strFullyQualifiedName);
     if (type != null)
         return Activator.CreateInstance(type);
     foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
     {
         type = asm.GetType(strFullyQualifiedName);
         if (type != null)
             return Activator.CreateInstance(type);
     }
     return null;
 }

এবং আপনি উপরে পদ্ধতি কলিং দ্বারা উদাহরণ পেতে পারেন।

object objClassInstance = GetInstance("Vehicles.Car");
0
যোগ
@ ড্যানমিশার, যেটি সমাবেশের নামটি কঠিন কোডিংয়ের প্রয়োজন। নমনীয়তা বাস্তবায়নে আমি নল চেক করছি এবং কোডটি গতিশীল ভাবে কাজ করে :)
যোগ লেখক Sarath Avanavu, উৎস
আপনার দ্বিতীয় ক্ষেত্রে (বহিরাগত সমাবেশে), আপনি আপনার প্রথম পদ্ধতিতে "Vehicles.Car, OtherAssembly" তে কেবল পাস করতে পারতেন এবং এটি কাজ করবে। স্পষ্টতই অন্যআস্যাব্যাপারে এটির সমাবেশের নাম রয়েছে।
যোগ লেখক danmiser, উৎস

যদি এমন কিছু হয় যা একটি অ্যাপ্লিকেশনের উদাহরণে অনেকটা বলা হবে, তাহলে অ্যাক্টিভেটর বা ConstructorInfo.Invoke() ব্যবহার করার পরিবর্তে গতিশীল কোড কম্পাইল এবং ক্যাশে দ্রুততর হবে। ডায়নামিক কম্পাইলেশনের জন্য দুটি সহজ বিকল্পগুলি লিনক এক্সপ্রেশন বা কম্পাইল করা হয় কিছু সহজ আইএল </কোড> অপকোড এবং ডায়নামিকম পদ্ধতি । কোনও ভাবেই, পার্থক্যটি বিশাল যখন আপনি টুপি লুপ বা একাধিক কলগুলিতে প্রবেশ করতে শুরু করেন।

0
যোগ
"আইএল ওপসড এবং ডায়নামিকম পদ্ধতি" লিঙ্কটি মৃত।
যোগ লেখক Judge Bread, উৎস
public AbstractType New
{
    get
    {
        return (AbstractType) Activator.CreateInstance(GetType());
    }
}
0
যোগ

যদি আপনি ডিফল্ট কন্সট্রাকটর ব্যবহার করতে চান তবে প্রথমে System.Activator উপস্থাপিত সমাধান ব্যবহার করে সমাধানটি সম্ভবত সবচেয়ে সুবিধাজনক। যাইহোক, যদি টাইপ একটি ডিফল্ট কনস্ট্রাকটর অভাব অথবা আপনি একটি অ ডিফল্ট এক ব্যবহার করতে হবে, তারপর একটি বিকল্প প্রতিফলন বা System.ComponentModel.TypeDescriptor ব্যবহার করতে হয়। প্রতিচ্ছবি ক্ষেত্রে, এটি শুধু টাইপ নাম (তার নামস্থান সঙ্গে) জানতে যথেষ্ট।

প্রতিফলন ব্যবহার উদাহরণ:

ObjectType instance = 
    (ObjectType)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(
        typeName: objectType.FulName, // string including namespace of the type
        ignoreCase: false,
        bindingAttr: BindingFlags.Default,
        binder: null,  // use default binder
        args: new object[] { args, to, constructor },
        culture: null, // use CultureInfo from current thread
        activationAttributes: null
    );

TypeDescriptor ব্যবহার করে উদাহরণ:

ObjectType instance = 
    (ObjectType)System.ComponentModel.TypeDescriptor.CreateInstance(
        provider: null, // use standard type description provider, which uses reflection
        objectType: objectType,
        argTypes: new Type[] { types, of, args },
        args: new object[] { args, to, constructor }
    );
0
যোগ

এই সমস্যাটি দেওয়া হলে অ্যাক্টিভাইটার কাজ করবে যখন কোনও প্যাসিভ্যালাল সিটিওর থাকবে। যদি এটি একটি সীমাবদ্ধতা ব্যবহার করে বিবেচনা করে

System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject()
0
যোগ