让一个对象只能访问同一个程序集中的另一个对象?每个业务对象都有一个包含sql调用的匹配对象。我想以这样的方式限制这些sql对象,使它们只能被匹配的业务对象使用。如何实现?更新Greg提出了关于可测试性的观点。由于SqlObjects将包含非常业务流程特定的sql,我不希望它们在多个业务对象之间重复使用。(基本的CRUD操作都是代码生成的)有没有办法让SqlObjects只能被业务组件中的一个业务对象访问(如yshuditelu和GregBeech所建议的)并将SqlObjects暴露给单元测试组件?如果这是您想要或需要采用的方法,您可以使sql对象成为业务对象中的私有类。publicclassBusinessObject{privateclassSqlObject{}}此外,通过使用部分类,您可以根据需要将它们分离到单独的文件中。//在一个文件中publicpartialclassBusinessObject{//businessobjectimplementation}//在另一个文件中publicpartialclassBusinessObject{privateclassSqlObject{}}Joel在下面的评论中提出了一个很好的观点:“SqlObject仍然可以继承公共类型,因为连接信息可以在这些“内部”类之间共享。”这是绝对正确的,而且非常有益。针对您的编辑,单元测试只能测试公共类和函数(测试中不使用反射)。我能想到的唯一选择是:此外,此时您不必将sql对象保留为嵌套类。总的来说,我认为这可能会增加更多的复杂性而不是增加的价值,但我完全理解每种情况都是不同的,如果你的要求/期望驱使你,我祝你好运。就我个人而言,我认为我会将SqlObjects公开(或对单元测试在内部可见),并接受这样一个事实,即这意味着sql类对所有业务类公开。做到这一点的唯一方法是使SQL对象成为私有嵌套类型,即publicclassBusinessObject{privateclassSqlObject{}}从可测试性的角度来看这是一个好主意完全是另一回事......你正在尝试在C++中实现的是Friend类。据我所知,C#和VB.Net没有任何等价物。我唯一的建议是让你想要的类成为一个内部类,限制需要访问它的类。您还可以使用两个程序集(一个用于业务对象,一个用于相关的SQL对象)并对每个SQL类使用内部修饰符,然后使用[InternalsVisibleTo("BusinessObjectAssembly")]作为SQLAssembly。以上是C#学习教程:让一个对象只能被同一个程序集中的另一个对象访问?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
