【问题标题】:Object oriented problem C#面向对象的问题 C#
【发布时间】:2011-06-18 06:28:33
【问题描述】:

我有两个对象。其中一个有另一个对象。

User     
-----
ID
Name
Surname

UserAddress
------------
ID
UserID
Address

当我更改第一个(用户)时,第二个(用户地址)中的这个对象不会改变。我该如何解决?

我正在向哈希表添加对象。当我需要列出我的数据时,我使用这个哈希表。当我更新对象时,我在哈希表中找到这个对象的索引。之后我更新。但是隐藏在第二个对象中的这个对象没有更新。

我正在从数据库中获取 userAddress-object 用户地址信息。

_userAddress= new userAddress();

_userAddress.ID = Convert.ToInt32(d["ID"]);

_userAddress.Address= d["Address"].ToString();

////I am taking user object here. _userAddress.UserID=           (Address)_userDa.Detail(Convert.ToInt32(d["UserID"]), conStr);

当我更改用户对象时,userAddress 对象中的相同用户对象不会更改。

【问题讨论】:

  • UserAddress 如何包含User 实例?我看到UserID,它假定对应于现有User 的ID,但我没有看到引用User 实例的属性。
  • 您能否发布有关如何操作对象的代码?
  • 你是如何“改变”它的?我假设那是一个数据库!?
  • UserAddress 有一个 UserID 字段 - 这应该存储对 User 的引用还是用户 ID 的表示(例如 int 或 Guid)?
  • 你为什么会期望它?一个对象以何种方式“拥有”另一个对象(您的示例中没有显示任何此类封装)

标签: c# asp.net object oop


【解决方案1】:

您似乎正在尝试将 RDBMS 行为应用于对象。如果 UserID 字段在 C# 代码之外没有任何用途,则应将其删除。

无论如何,将 User 作为属性添加到 UserAddress 类。从 UserAddress 中删除 UserId。

【讨论】:

    【解决方案2】:

    听起来您正在以关系数据库的方式思考。

    您的 User 对象应该有一个 UserAddress 对象作为属性(或者它们的集合,假设允许多个地址 - 因此需要关系)。

    然后,您的数据访问实现应该负责对基础表(或您使用的任何存储机制)的更新

    【讨论】:

      【解决方案3】:

      ID是什么类型?

      如果是值类型,就不行了。

      如果是引用类型,请确保您引用了相同的 ID 对象。

      更好的方法是参考- 用户->用户地址 用户地址->用户

      那么你可以这样做 - userAddress.User.ID 或用户 ID 获取相同的 ID。

      【讨论】:

        【解决方案4】:

        除非 2 个类相互引用,否则您不太可能看到更改。你可以有类似的东西 -

        class User
        {
           UserAddress Address {get;set;}
           //Other properties
        }
        
        User u = new User();
        u.Address = new UserAddress();
        

        同样,UserAddress 应该引用 User 对象而不是单独的 ID。

        【讨论】:

          猜你喜欢
          • 2014-07-10
          • 2011-11-29
          • 1970-01-01
          • 1970-01-01
          • 2011-07-25
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-27
          相关资源
          最近更新 更多