Tag: 实例化

如何使用带有C#/ .NET的Reflection实例化程序集中的类?

我有这个库编译为calc.dll。 namespace MyClass { public class Calculator { public int Value1 {get; set;} public int Value2 {get; set;} public Calculator() { Value1 = 100; Value2 = 200; } public int Add(int val1, int val2) { Value1 = val1; Value2 = val2; return Value1 + Value2; } } } 我想实例化Calculate类而不链接到calc.dll。 C#可以做到吗? 我想出了这个代码,但我不知道如何实例化Calculator类。 using System; using System.IO; […]

为什么私有成员变量可以被类实例更改?

class TestClass { private string _privateString = “hello”; void ChangeData() { TestClass otherTestClass = new TestClass(); otherTestClass._privateString = “world”; } } 这段代码在C#中编译,并且在PHP中等效,但有人可以解释为什么可以在这里更改otherTestClass._privateString的原因吗? 我原以为一个类的实例在任何情况下都不应该能够更改私有成员变量,并且尝试访问otherTestClass._privateString会导致“由于保护级别而无法访问”错误。 但事实并非如此,那么为什么在自己的类中实例化一个对象可以让你访问私有成员呢? 如果它,这不会破坏封装到一定程度? 还是我错过了一些明显的东西? (我不是在问上面的类设计是不是很好的做法,只是想知道它背后的理论。) 编辑 – 感谢您的回答和评论。 为了澄清,我也有兴趣知道能否做到这一点被认为是一个积极的function,或者它是否是更好的编译时检查/代码清晰度的必要权衡/因为大多数其他语言都是这样做或者其他什么。 在我看来,理想情况下编译器会阻止或警告你这个,但后来我远离语言设计师。 任何有关它如何通过这种方式的例子都可以让你做一些有用的事情(不会违反封装),否则很难或不可能。

在没有新约束的情况下创建T的新实例

如果想要创建generics的新实例,则需要定义新约束 ,如下所示: public T SomeMethod() where T : new() { return new T(); } 是否可以使用reflection在没有新约束的情况下创建T的实例,如此(包含伪代码): public T SomeMethod() { if (T has a default constructor) { return a new instance of T; } else { return Factory.CreateNew(); } }

确定类型是否为静态

假设我有一个叫做type 。 我想确定我是否可以使用我的类型执行此操作(实际上不对每种类型执行此操作): 如果type是System.Windows.Point那么我可以这样做: Point point1 = new Point(); 但是,如果type是System.Environment那么这将不会飞: Environment environment1 = new Environment(); //wrong 因此,如果我遍历程序集中的每个可见类型,如何跳过将无法创建第二个实例的所有类型? 我对反思很陌生,所以我的术语还不是很好。 希望我在这里尝试做的很清楚。

C#委托实例化与仅传递方法参考

我有一个简单的问题:实例化C#委托与仅传递函数引用相比有什么好处? 我的意思是: 为什么: Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod)); 当你能做到: Thread t = new Thread(SomeObject.SomeMethod); 两者都会按照我的经验编译和工作……我错过了什么?