Tag:

是否可以在不运行类中的任何代码的情况下创建类的实例? (没有ctor,没有字段初始化)

我创建了一个引入实现接口的第三方插件(DLL)的引擎。 由于我无法控制插入的代码,我希望能够从正确的类(GetTypes循环直到我找到接口类)运行1个特定方法(来自接口)。 由于任何人都可以创建在Activator.CreateInstance上执行的优秀构造函数代码,我可以通过使用FormatterServices.GetUninitializedObject来解决这个问题。 但是,当在类中的字段上初始化代码时,这无济于事。 public class myclass : myinterface { public someotherclass name = new someotherclass() public myclass() { //Unknown code } //I only want this run. public string MyProperty{ get { return “ANiceConstString”; } } } 两种方式(CreateInstance / GetUninitializedObject)的问题是将运行someotherclass的构造函数。 在开始分析我的需求之前。 这仅在初始化引擎时运行以获得一组标准值。 如果此get’er依赖于其他初始化值,则“插件”将被标记为失败,因为没有返回有效值。 如果没有标记为失败,则稍后将使用Activator.CreateInstance()正确加载该类。 所以坚持这个问题:.Net是否支持任何创建100%非初始化类的方法? 更新答案。 我在发布问题之前对此进行了测试。 对于某个其他类不会运行的答案,我已经测试了它,并且它是静态运行的。 public class myclass : myinterface { static […]

创建一个在c#中实现多个接口的抽象类

我想在c#中创建一个抽象类,它从不同的接口“inheritance”,但是将具体的实现留给了子类。 然而,编译器抱怨说,该类没有实现接口中指定的方法。 我已经习惯了Java总是有效的,所以我不确定它应该如何在c#中工作。 无论如何,这是我的代码: public abstract class MyClass : IDisposable, IPartImportsSatisfiedNotification { private string name; public MyClass(string name) { this.name = name; } }

如何防止某些方法的inheritance?

如何防止派生类中某些方法或属性的inheritance?! public class BaseClass : Collection { //Some operations… //Should not let derived classes inherit ‘Add’ method. } public class DerivedClass : BaseClass { public void DoSomething(int Item) { this.Add(Item); // Error: No such method should exist… } }

如何在运行时获取当前的类名?

我正在尝试将当前的类名称转换为字符串。 例如: public class Marker : Mark { string currentclass = ???; } public abstract class MiniMarker : Mark { } 我想从Marker类中获取字符串,所以我不必将它放在我从中创建的每个抽象类中。 我希望字符串是MiniMarker ,或者是抽象类的名称。 我尝试了MethodBase.GetCurrentMethod().DeclaringType ,但它没有用。

“类,其中T:Enum”不起作用

可能重复: 创建将T限制为枚举的通用方法 我们有什么理由不能在C#中做到这一点吗? 而且,如果可能的话,我该怎么做类似的事情! 我想要的是 : public class ATag where T : enum { [Some code ..] } public class classBase where T : enum { public IDictionary tags { get; set; } } 所以,当它到了调用它的时候,我只能得到一个我的枚举值。 public class AClassUsingTag : classBase { public void AMethod(){ this.tags.Add(PossibleTags.Tag1, “Hello World!”); this.tags.Add(PossibleTags.Tag2, “Hello Android!”); } } public enum PossibleTags […]

在非静态类中调用静态方法时是否实例化了类?

究竟在Bar类中调用Foo.SomeCheck()时会发生什么? 是否为了调用SomeCheck()而创建了一个Foo实例? 如果是这样,这个实例是否存储在堆上,是否通过垃圾收集收集? public class Foo() { public static bool SomeCheck() { return true; } } public class Bar() { public void SomeMethod() { // what happens when we access Foo to call SomeCheck? if (Foo.SomeCheck()) { //do something } } }

C#将控件添加到另一个类的表单中

每次我创建一个新的Player实例时,我都想做以下代码 private void button1_Click(object sender, EventArgs e) { Player Player1 = new Player(); } Player class { public Player() { Form1.AddControls(someControl) } } 我似乎无法与form1做任何事情,例如textbox1.text = “Test” 。 我认为这是一个范围问题,但我无法在互联网上找到答案。 有谁知道如何通过类访问+添加控件到我的form1 ? 感谢您的时间。

如何修改类的名称而不是自动单一化

使用EF创建类我选择singularize选项。 有些课程是单一的,但其他课程没有。 这项工作还可以: products -> product presentations -> presentation 但这两个不是: price_sources -x-> price_source user_types -x-> user_type 如何修复类的名称不是单一的? 如何使用下划线修复类的名称? 如何确保db的下一次更新不会再次破坏名称?

如何在一个类中将对象从一个方法初始化为另一个方法?

在课堂上,我有两种方法。 在method1中我创建了一个对象,但我不能在method2中使用相同的对象。 为什么? 请帮助一个简单的例子。 编码太大了,所以我给出了布局 public class Sub { } public class DataLoader { public void process1() { Sub obj = new Sub(); } public void process2() { // here I can’t use the object } }

在.net c中的代码中创建类类型#

当我查看System.Linq.Expressionfunction(在代码中创建表达式树,编译它们,执行它们)时,我问自己这是否也可以创建类 – 特别是generics类。 我期望像Expression.Class()或Expression.GenericClass()。 看看这些方法,我没有看到任何这些。 这将是非常实用的,因为我可以动态地构建业务对象。 实际上这就是我需要的。 如果在.net c#中有另一种方法,那也是我感兴趣的。