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
propertycmd.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中通常无法获取某个对象的父对象(在许多情况下甚至没有意义,因为多个对象可以引用同一个子实例),除非子对象持有对其父对象的引用并将其公开。