English 中文(简体)
从固定基类方法中吸引子级构造者
原标题:Calling subclass constructor from static base class method

Ok...在目标C中,你可以从基类静态方法中添加一个子级,并添加新的(......),因为静态方法指的是该类别,而不是这种情况。 这是在我首次发现时发现的压倒性冷却,我经常使用。

然而,在C#中,没有工作。 Damn!

因此,任何人都知道,我如何能够从固定基级方法中提升子级?

......

public class MyBaseClass{

    string name;

    public static Object GimmeOne(string name){

     // What would I replace  this  with in C#?
        return new this(name); 

    }

    public MyBaseClass(string name){
        this.name = name;
    }

}

// No need to write redundant constructors
   public class SubClass1 : MyBaseClass{ }
   public class SubClass2 : MyBaseClass{ }
   public class SubClass3 : MyBaseClass{ }

SubClass1 foo = SubClass1.GimmeOne("I am Foo");

是的,我知道(而且通常会)我可以直接使用建筑商,但我们特别需要把一个共同成员召集在基类上,以便解释我为什么要这样做。 同样,目标C让我这样做。 C#也是这样。

因此,任何接收者?

最佳回答

C#nt与这完全相当。 然而,你可能通过使用诸如以下一类的一般性限制来解决这一问题:

public class MyBaseClass
{
    public string Name { get; private set; }

    public static T GimmeOne<T>(string name) where T : MyBaseClass, new()
    {
        return new T() { Name = name };
    }

    protected MyBaseClass()
    {
    }

    protected MyBaseClass(string name)
    {
        this.Name = name;
    }
}

新的()制约因素说,有一个无参数的建筑商——这是你 did的,但我们却把它从消费者那里藏起来。 然后可以援引:

var foo = SubClass1.GimmeOne<SubClass1>("I am Foo");
问题回答

职业介绍会,你可以这样做。 C#在道义上反对静态继承方法。 Gimme 一种方法永远不会有除MyBaseClass以外的任何类型,将其从次类Class1中划出,但“实际上”MyBaseClass打电话。 反省图书馆可以进行这一建设,但你们从来都不会从我的篮子之外得到任何东西。

如果你重新使用静态方法,你大概知道,你会从中解脱。 为每一次子类创造不同的工厂方法。 如果你实际上试图通过实例来做到这一点,你或许应当使用非静态虚拟工厂方法(这将自动称作功能的最衍生形式,或许是你想要的)。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签