在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允许你给某一类的完全访问权限,以正好一个其他类)
我希望类的私有成员变量可以被Tester类访问,而不会将它们暴露给其他类.
在C++中,我只是将Tester类声明为朋友,如何在C#中执行此操作?有人能举个例子吗?
我有一个使用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