Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何使某些成员仅对一个对象可用?_Vb.net_Oop - Fatal编程技术网

Vb.net 如何使某些成员仅对一个对象可用?

Vb.net 如何使某些成员仅对一个对象可用?,vb.net,oop,Vb.net,Oop,我有一个EggSac对象,它包含对>100000个Egg对象的引用。鸡蛋中的一些变量必须保持与EggSac一致,所以我想让这些变量只能通过EggSac进行更改。然而,EggSac在整个应用程序中传递对其鸡蛋的引用,因此如果我使用公共方法,那么任何其他代码都可能意外地修改鸡蛋的安全部分 什么是正确的OO方法来确保只有EggSac对象可以调用鸡蛋的“安全”方法,但仍然让每个人都可以使用“安全”方法 我的想法是将Egg的类拆分为只包含安全方法的基类和只包含EggSac应该访问的安全方法的派生类。然后,

我有一个EggSac对象,它包含对>100000个Egg对象的引用。鸡蛋中的一些变量必须保持与EggSac一致,所以我想让这些变量只能通过EggSac进行更改。然而,EggSac在整个应用程序中传递对其鸡蛋的引用,因此如果我使用公共方法,那么任何其他代码都可能意外地修改鸡蛋的安全部分

什么是正确的OO方法来确保只有EggSac对象可以调用鸡蛋的“安全”方法,但仍然让每个人都可以使用“安全”方法


我的想法是将Egg的类拆分为只包含安全方法的基类和只包含EggSac应该访问的安全方法的派生类。然后,EggSac拥有派生类类型的成员,但只要其他对象需要,它就会将这些成员强制转换为基类。

让EggSack持有对EggImpl的引用,EggImpl实现了所有必要的方法。然后在impl(Egg类)上传递包装,它只调用impl上的“safe”方法。

当你说安全性时,你的意思是避免意外的代码修改吗? 结构化方式可以是如下所示。 如果您想让它真正“安全”,那么您可以修改代码以在调用类中存储字符串*HashCode*,并且仅当它在Egg中匹配(在内部调用)时,才允许修改

Interface ISecureModifier
{
    String  GetSecureModifierKEY();
    String  GetSecureModifierVALUE();


}


class Egg
{

    Dictionary Secure_ata;
    public secureDataModifier( ISecureModifier modifyingObject)//note the interface being used
    {
        //Here, try a cast (if your compiler still allowed other type objects not implementing ISecureModifier  ) and throw exception stating not authorized to modify.
        modifyingObject.GetSecureModifierKEY
        modifyingObject.GetSecureModifierValue
            /*Now write the code to modify Dictionary*/


    }

}

class EggSac:ISecureModifier//implements interface
{

    private string SecureModifierKEY;
    private string SecureModifierVALUE



    String  GetSecureModifierKEY()//inteface impl
    {
        return SecureModifierKEY;
    }
    String  GetSecureModifierVALUE();//interface impl
    {
        return SecureModifierVALUE;
    }

    ModifySecureData(Egg egg, string key, string value)
    {
        egg.secureDataModifier(this);//passing own reference

    }


}
你可以这样称呼我

objEggSack.ModifySecureData(objEgg101, "firstKey","NewValue")

所谓安全,我的意思是其他代码不能修改它。我更喜欢用对象来强制执行,而不是编写代码。部分是因为它看起来很难看,部分是因为性能原因——有时我不得不在用户没有注意到的情况下迭代这些>100000个鸡蛋。