草庐IT

方差虚拟化

全部标签

c# - 为什么数组协方差被认为如此可怕?

在.NET中,引用类型数组是协变的。这被认为是一个错误。但是,我不明白为什么这会如此糟糕,请考虑以下代码:string[]strings=new[]{"Heythere"};object[]objects=strings;objects[0]=newobject();噢,这会编译,但会在运行时失败。当我们试图将一个对象粘贴到一个字符串[]中时。好吧,我同意这很糟糕,但是T[]扩展了Array并且还实现了IList(和IList,我想知道它是否实现了IList...>。Array和IList都让我们犯了同样可怕的错误。string[]strings=new[]{"Heythere"};A

C# EF Code First 虚拟关键字,它有什么作用?

为什么我们在声明导航属性时需要使用“virtual”关键字?我知道CodeFirst框架以某种方式使用它来识别该属性是一个导航属性,但我想知道如何。具体来说,我想知道它与MSDN文档中针对“virtual”关键字的描述有何关系:http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.80).aspx 最佳答案 在运行时,EntityFramework将为您生成所谓的代理实体。这些实体是派生自您的实体类型的动态创建类型的对象。这允许您将您的实体用作POCO,它是一个与EntityFr

c# - 为什么我们使用虚拟和覆盖?

如果不使用override和virtual效果一样,为什么还要使用override和virtual?示例1:classBaseClass{publicvirtualstringcall(){return"A";}}classDerivedClass:BaseClass{publicoverridestringcall(){return"B";}}输出:B示例2:classBaseClass{publicstringcall(){return"A";}}classDerivedClass:BaseClass{publicstringcall(){return"B";}}输出还是一样:输出

c# - 从物理路径转换为虚拟路径

我有这个函数可以将文件数据作为字节数组和文件路径获取。我得到的错误是当它试图在代码bewlo中设置fileInfo时。它说“给定物理路径,期望虚拟路径”publicoverridevoidWriteBinaryStorage(byte[]fileData,stringfilePath){try{//Createdirectoryifnotexists.System.IO.FileInfofileInfo=newSystem.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath(filePath));//whenitgetst

c# - 获取 url 的主要部分,包括虚拟目录

我正在使用.net4.0c#。我希望能够从当前的http请求中获取url,包括任何虚拟目录。因此,例如(请求和寻求值(value)):http://www.website.com/shop/test.aspx->http://www.website.com/shop/http://www.website.com/test.aspx->http://www.website.com/http://website.com/test.aspx->http://website.com/如何实现这一目标? 最佳答案 这是我用的HttpConte

c# - 为什么编译器不能在这种重载解析情况下告诉更好的转换目标? (协方差)

理解关于重载决议的C#语言规范显然很难,现在我想知道为什么这个简单的案例失败了:voidMethod(Funcf){}voidMethod(Funcf){}voidCall(){Method(()=>{thrownewNotSupportedException();});}这会产生编译时错误CS0121,以下方法或属性之间的调用不明确:后跟我的两个Method函数成员(重载)。我所期望的是Func是一个比Func更好的转换目标,然后应该使用第一个重载。自.NET4和C#4(2010)起,通用委托(delegate)类型Func在TResult中一直协变,因此存在从Func的隐式转换至F

c# - 获取虚拟目录的名称?

我正在使用Request.ApplicationPath来了解我在其中运行的虚拟目录的名称。有没有更靠谱的方法? 最佳答案 Request.ApplicationPath是获取虚拟目录的非常可靠的方法,并且在您拥有HttpContext并且可以请求请求数据时始终有效。要进一步处理和提取部分路径,请查看VirtualPathUtility类。 关于c#-获取虚拟目录的名称?,我们在StackOverflow上找到一个类似的问题: https://stackove

c# - 在 C# 中,如何检查路径是否为虚拟路径?

可能的虚拟路径:/folder1/folder2/image.jpg~/folder1/folder2/image.jpgfolder1/folder2/image.jpg具体路径:C:\folder1\folder2\image.jpgD:\folder1\folder2\image.jpgC:/folder1/folder2/image.jpgC:/folder1\folder2/image.jpg如何以不易出错的方式检查路径是否为虚拟路径?我问的原因是因为当我在具体路径上使用Server.MapPath()时,它会抛出异常。但是,我传递给Server.MapPath()的可以是我

c# - 虚拟泛型方法调用是如何实现的?

我对CLR如何实现这样的调用很感兴趣:abstractclassA{publicabstractvoidFoo();}Aa=...a.Foo();//此调用是否会导致某种散列映射查找,通过类型参数标记作为键并编译泛型方法特化(一个用于所有引用类型,不同代码用于所有值类型)作为值? 最佳答案 我没有找到太多关于这个的确切信息,所以这个答案的大部分是基于excellentpaperon.Netgenericsfrom2001(甚至在.Net1.0出现之前!),afollow-uppaper中的一个简短说明以及我从SSCLIv.2.0so

c# - 为什么 Object.GetType() 不是虚拟的?

取自MSDN的代码示例publicclassTest{publicstaticvoidMain(){MyBaseClassmyBase=newMyBaseClass();MyDerivedClassmyDerived=newMyDerivedClass();objecto=myDerived;MyBaseClassb=myDerived;Console.WriteLine("mybase:Typeis{0}",myBase.GetType());Console.WriteLine("myDerived:Typeis{0}",myDerived.GetType());Console.Wr