Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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
C#如何从子类获取父类属性_C#_Oop_Parent Child - Fatal编程技术网

C#如何从子类获取父类属性

C#如何从子类获取父类属性,c#,oop,parent-child,C#,Oop,Parent Child,也许我有点笨,但我需要从子类中获取基类参数的值。我该怎么做 我的代码: using (OracleConnection connection = new OracleConnection(ConnStr)) { connection.Open(); using (OracleCommand cmd = connection.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.Comma

也许我有点笨,但我需要从子类中获取基类参数的值。我该怎么做

我的代码:

using (OracleConnection connection = new OracleConnection(ConnStr)) {
  connection.Open();
  using (OracleCommand cmd = connection.CreateCommand()) {
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Package.StoredProcedure";

    cmd.Parameters.Add(DbParam("in_id", OracleDbType.Int32, id));
    cmd.Parameters.Add(DbOutParam("out_success", OracleDbType.Int32, 1));

    cmd.ExecuteNonQuery();
    int out_success = cmd.Parameters.GetIntValue("out_success");
    connection.Close();
  }
}
我为
OracleParameterCollection

private static int GetIntValue(this OracleParameterCollection parameter, string parameterName) {
  bool success = int.TryParse(parameter[parameterName].Value.ToString(), out int response);
  if (success == false) {
    Console.Out.WriteLine($"TryParse parameter: {parameterName}");
    throw new Exception("Unhandled Exception");
  }
  return response;
}

我需要进入扩展名
GetIntValue
property
cmd.CommandText
,以便在控制台中打印-这是怎么可能的?

如果需要引用命令,让扩展方法接受命令实例,而不是参数:

private static int GetIntValue(this OracleCommand command, string paramName)
{
    var parameters = command.Parameters;

    if (!parameters.Contains(parameterName))
        throw new ArgumentException(
            $"{command.CommandText} does not contain param {parameterName}");

    if (!int.TryParse(parameters[paramName].Value.ToString(), out int response))
        throw new FormatException(
            $"could not parse {paramName} in {command.CommandText}");

    return response;
}

请注意,从安全角度来看,将命令文本转储到异常上可能不是一个好主意。

GetIntValue
采用
OracleParameterCollection
,该集合不是命令,因此不清楚它将引用哪个命令。另外,
抛出新异常(“未处理的异常”)
是一个很难抛出的异常。请小心使用的标记。更正
c
->
c#
是的,它工作得很好:)但我想知道如何从父类中获取属性-只是为了一般开发:)@IgorCova:
OracleParameterCollection
不公开其父类,您可以轻松地自己实例化它,也就是说,您可以编写
新的OracleParameterCollection().GetIntValue(“something”)
并且它根本不会绑定到命令。在OOP中通常无法获取某个对象的父对象(在许多情况下甚至没有意义,因为多个对象可以引用同一个子实例),除非子对象持有对其父对象的引用并将其公开。