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