代码之家  ›  专栏  ›  技术社区  ›  sharptooth

一个访问器方法返回一个变量还是返回几个不同的类型?

  •  1
  • sharptooth  · 技术社区  · 15 年前

    我有一个COM接口,需要添加一个访问器方法。返回的值实际上可以是4种类型之一:VARIANT_BOOL、long、BSTR或IDispatch派生接口。

    因此,我有一个选择:要么返回一个变量,要么使用4种不同的访问方法返回不同的类型。

    interface IValue1 {
        HRESULT GetType( TypeEnum* );
        HRESULT GetValue( VARIANT* );
    };
    

    interface IValue2 {
        HRESULT GetType( TypeEnum* );
        HRESULT GetLongValue( long* );
        HRESULT GetBstrValue( BSTR* );
        HRESULT GetBoolValue( VARIANT_BOOL* );
        HRESULT GetInterfaceValue( ICustomInterface** );
    }
    

    为了清楚起见,我还是要使用IValueX::GetType。如果我选择后一个选项,则4个访问器中只有一个会实际返回值,其他所有访问器都会由于类型不匹配而指示错误。

    我需要这个接口可以从尽可能广泛的客户机上使用-包括VB6、Perl、.NET。

    哪一种选择更好?使用变体还是使用不同的类型?

    3 回复  |  直到 15 年前
        1
  •  2
  •   1800 INFORMATION    15 年前

    GetType

        2
  •  1
  •   G S    15 年前

    然而,对于客户机编码人员来说,变体方法显然不那么容易混淆。更少的方法意味着更少的认知负荷。所以我认为你应该把它挑出来。

        3
  •  1
  •   Dan F    15 年前

    我喜欢第二个。或者两者兼而有之,很少有时候消费者真的不在乎他们得到了什么(有点像 SqlDataReader.GetValue )。正如Frederick指出的,客户机编码人员可能最终会编写一个select case语句,因此您也可以编写“正确”的数据类型。信息技术 真正地 取决于预期的使用模式,但我倾向于使用正确的数据类型而不是变体。