相关疑难解决方法(0)

为什么C#不提供C++风格的"朋友"关键字?

C++朋友关键字允许class A指定class B作为其朋友.这允许Class B访问private/的protected成员class A.

我从来没有读过任何关于为什么这个被排除在C#(和VB.NET)之外的东西.早期StackOverflow问题的大多数答案似乎都说它是C++的一个有用部分,并且有充分的理由使用它.根据我的经验,我必须同意.

在我看来,另一个问题是如何friend在C#应用程序中执行类似的操作.虽然答案通常围绕嵌套类,但它看起来并不像使用friend关键字那么优雅.

最初的设计模式书在其示例中定期使用它.

总而言之,为什么friend缺少C#,以及在C#中模拟它的"最佳实践"方式(或方法)是什么?

(顺便说一句,该internal关键字一样的东西,它可以让所有的整个组件来访问内部的阶级internal的成员,同时friend允许你给某一类的完全访问权限,以正好一个其他类)

c# c++ oop design-patterns friend

205
推荐指数
10
解决办法
6万
查看次数

什么是C#相当于朋友?

可能重复:
为什么C#不提供C++风格的'friend'关键字?

我希望类的私有成员变量可以被Tester类访问,而不会将它们暴露给其他类.

在C++中,我只是将Tester类声明为朋友,如何在C#中执行此操作?有人能举个例子吗?

c#

175
推荐指数
5
解决办法
19万
查看次数

将DBContext转换为ObjectContext以与GridView一起使用

我有一个使用EF codefirst的webforms项目来保存数据.我想使用GridView和EntityDataSource,以节省写入CRUD.这可能吗?

我可以将我的DBContext转换为EntityDataSource所期望的ObjectContext吗?

这是我试过的:

<asp:EntityDataSource ID="OrdersDataSource" runat="server" ContextTypeName="SomeNamespace.Models.ShopDBContext" 
     EnableFlattening="False" EntitySetName="Orders" EntityTypeFilter="Order" EnableDelete="False" 
     EnableUpdate="False" Include="OrderLines" OrderBy="it.Id"> 
</asp:EntityDataSource>

<asp:GridView ID="OrdersGridView" runat="server" AllowPaging="True" AllowSorting="True" 
     AutoGenerateColumns="True" DataKeyNames="Id" DataSourceID="OrdersDataSource" /> 
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个例外:

无法将类型为"SomeNamespace.Models.ShopDBContext"的对象强制转换为"System.Data.Objects.ObjectContext".

gridview entitydatasource ef-code-first entity-framework-4.1

29
推荐指数
1
解决办法
3万
查看次数