Tag: 内部

Nullable 是不可能的,为什么不呢?

对不起,如果它是一个愚蠢的问题,我试图更好地了解.Net中的Nullable类型。 从我注意到的Microsoft源代码(使用ReSharper),我知道Nullable是一个结构,T需要是一个结构 public struct Nullable where T : struct 现在,我试着做这样的事情 public struct CustomNullable where T : struct { } public class CustomNullableClass where T : struct { } 我编译时遇到错误: Nullable a = null; Nullable<Nullable> a1 = null; 对于上面提到的代码,我得到一个错误’只有非可空的值类型可能是System.Nullable的基础’,但是如何在Nullable类型中强制执行? 并为 CustomNullable a2 = null; CustomNullableClass a3 = null; 我得到一个错误’类型System.Nullable必须是不可为空的值类型才能将其用作参数T’。 我现在有点困惑,有人可以帮助我理解发生了什么或者我不明白的东西? 非常感谢提前。 编辑:如果结构是值类型而值类型不能为null,那么Nullable如何成为结构? 信用:消费者

实例化一个Internal类并将其作为给定类型进行转换

跟进InternalsVisibleTo 。 我已经看过c#Instantiating内部类与私有构造函数 ,这有帮助,但我试图将返回的对象作为内部类型,并且说实话,我不是100%,这是可能的。 我正在尝试使用Reflection的路径来解决这个问题,但是我正在努力弄清楚如何使用reflection来实现私有方法的内部类型。 我可以去拉类型并获取构造函数并创建一个对象。 如果我想要转换的类型是内部类型,我将如何预先形成对象的强制转换。 public object InitPrivateCoreObjects(string Type) { Assembly Core = Assembly.Load(“Stuff.Core, Version=0.3.3881.21340, Culture=neutral, PublicKeyToken=4fe470e63e2d354e”); Type TypeToReflect = Core.GetType(“Stuff.Core.AssemblyWithIdentifer”); object o = Activator.CreateInstance(TypeToReflect); MethodInfo mi = TypeToReflect.GetMethod(“AssemblyWithIdentifer”); object newObject = mi.Invoke(o,null); //alternatively //ConstructorInfo ctor = TypeToReflect.GetConstructor(new Type[]{TypeToReflect.GetType()}); //ctor.Invoke(newObject, null); return newObject; } 我可以得到内部类的类型, 我可以调用构造函数并实例化该类型的对象。 但是,由于我无法访问内部类型,因此无法对其进行转换并从中进行操作。 我知道我可以使用Reflection.Emit来创建一个基于该类型的新类,但是如果我要走那条路,那么我也可以将我试图访问的项目的全部内容复制到我的测试项目中。 这将是非常浪费和毫无意义的,并且需要我从其他项目中投入一些东西并造成混乱,而这绝对不是我此时想去的路线。 我已经看到访问单个方法和属性的示例,但没有实例化整个类。 我不是100%确定它是可能的,因为在操作顺序中reflection发生在查看访问修饰符之前。 可以这样做,如果是这样,怎么办? 为了求情,我想使用实例化的对象进行测试,而[Assembly:InternalsVisibleTo(“”)]由于我目前正在解决的bug而无法正常工作。 […]

SqlDataAdapter如何在内部工作?

我想知道SqlDataAdapter是如何在内部工作的,特别是在使用UpdateCommand来更新巨大的DataTable (因为它通常比从循环中发送sql语句快得多)。 这是我想到的一些想法: 它创建了一个准备好的sql语句(使用SqlCommand.Prepare() ),并填充了CommandText并使用正确的sql类型初始化了sql参数。 然后,它在需要更新的数据行上循环,并为每条记录更新参数值,并调用SqlCommand.ExecuteNonQuery() 。 它创建了一堆SqlCommand对象,里面填充了所有内容( CommandText和sql参数)。 然后将多个SqlCommands一次性批处理到服务器(取决于UpdateBatchSize )。 它使用一些特殊的,低级或无证的sql驱动程序指令,允许以有效的方式对多行执行更新(需要使用特殊数据格式和相同的sql查询(此处为UpdateCommand )提供要更新的行针对这些行中的每一行执行)。

受保护的内部类在类中工作但不在外部工作

我正在尝试一些事情,并想知道为什么会发生这种情况。 说,我在命名空间n中有一个名为A的类,我试图创建受保护的内部类B. namespace n { public class A { public A() { } } protected internal class B //throwing error { } } 但是当我尝试这样的时候(B作为A的子类),它不会抛出错误并且它的成功。 你能解释一下为什么会这样吗? namespace n { public class A { public A() { } protected internal class B // its not throwing error { } } } 理论上我错过了什么吗? 它有点令人困惑。

在C Sharp中,“朋友”关键字相当于什么?

在C Sharp中,“朋友”关键字相当于什么? 如何使用’internal’关键字? 我已经读过’内部’关键字是C#中’朋友’的替代品。 我在我的C#项目中使用了一个DLL,我有源代码,但我不想修改现有的代码。 我inheritance了这个类,我可以以任何我想要的方式使用我inheritance的类。 问题是父类中的大多数代码都有受保护的方法。 以某种方式使用朋友可以访问或调用这些受保护的方法吗?

内部类的公共构造函数意味着什么

我已经看到一些C#代码声明了一个带有internal修饰符的类,带有一个public构造函数: internal class SomeClass { public SomeClass() { } } 如果整个类的可见性是内部的,那么拥有公共构造函数有什么意义呢?因此只能在定义程序集中看到它? 另外,如果SomeClass是嵌套类,这是否有意义?

如何创建一个接口,使一些方法保持在C#中进行测试?

考虑以下课程 public class Entity { public void Foo() { … } internal void Bar() { … } } 如您所见,它有一个public方法和一个internal方法。 现在,我想创建一个接口,允许我在测试中模拟这个类(在这个程序集和其他程序集中)。 我重写我的代码如下: public interface IEntity { void Foo(); } internal class Entity : IEntity { public void Foo() { … } public void Bar() { … } } 但是,这会产生另一个问题。 当在同一个程序集中的另一个方法中使用该类时,我不能再调用Bar : public class OtherClass { public […]

使内部类对其他程序集可见

将我的程序集中的内部类对其他程序集可见是否真实? 我知道AssemblyInfo文件和 [assembly: InternalsVisibleTo()] 属性。 但它在我的情况下不起作用。 这样做的主要目的是使LINQPAD成为可能的调用方法。 所以这个[assembly: InternalsVisibleTo(“LINQPad”)]不起作用。 我不知道为什么。 在我的项目中,我使用依赖解析器,在linqpad中很难做到这一点。 有什么建议吗?

C#程序集,什么是程序集?

我正在尝试理解C#中的内部访问修饰符。 我似乎无法理解assembly是什么,以及我的程序的哪个部分保存在该assembly中。 我试图使它变量只能由以下命名空间中的对象访问: namespace Engine.Entity 有问题的变量是在该命名空间内的类中定义的,所以我假设如果我将其设置为内部,那么只有该命名空间内的对象才能访问它。 我看到程序集和命名空间是一体的,我认为这是对的。

在.NET中,委托的内部实现是什么?

我理解委托人的声明是这样的: public delegate int PerformCalculation(int x, int y); 但是,必须有更多的事情发生。 委托的目的是提供指向方法的指针,为此,您将对方法的引用封装在委托中。 这个参考是什么类型的结构(代表内部)? 我也明白你可以在委托中封装对多个方法的引用。 这是否意味着委托中有一个包含这些数组的数组? 此外,委托中定义了哪些方法等。当您使用简洁声明委托时,实际发生了什么: public delegate int PerformCalculation(int x, int y); ? 编辑:一些澄清。 声明委托时,编译器会自动创建一个从System.MulticastDelegateinheritance的密封类。 如果你用ildasm查看你的程序集,你可以看到这个。 这很整洁。 基本上,使用一个语句,您将在编译时获得为您生成的全新类,并且它具有您需要的所有function。