我正在使用OracleClient
库版本1.0.5000.0,我对OracleParameter
类及其ICloneable
的实现感到困惑。
这是OracleParameter
类的定义:
public sealed class OracleParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable {
public OracleParameter();
public OracleParameter(string name, object value);
public OracleParameter(string name, OracleType oracleType);
public OracleParameter(string name, OracleType oracleType, int size);
public OracleParameter(string name, OracleType oracleType, int size, string srcColumn);
public OracleParameter(string name, OracleType oracleType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string srcColumn, DataRowVersion srcVersion, object value);
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[RefreshProperties(RefreshProperties.All)]
[Browsable(false)]
public DbType DbType { get; set; }
[RefreshProperties(RefreshProperties.All)]
public ParameterDirection Direction { get; set; }
[Browsable(false)]
[DesignOnly(true)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DefaultValue(false)]
public bool IsNullable { get; set; }
[DefaultValue(0)]
[Browsable(false)]
public int Offset { get; set; }
[RefreshProperties(RefreshProperties.All)]
public OracleType OracleType { get; set; }
[DefaultValue("")]
public string ParameterName { get; set; }
[DefaultValue(0)]
public byte Precision { get; set; }
[DefaultValue(0)]
public byte Scale { get; set; }
[DefaultValue(0)]
public int Size { get; set; }
[DefaultValue("")]
public string SourceColumn { get; set; }
public DataRowVersion SourceVersion { get; set; }
[DefaultValue("")]
[RefreshProperties(RefreshProperties.All)]
[TypeConverter(typeof(StringConverter))]
public object Value { get; set; }
public override string ToString();
}
它实现了System.ICloneable
,但那里没有Clone()
方法。
任何人都能解释一下吗?
答案 0 :(得分:5)
在.NET中,您可以使用以下语法显式实现接口成员:
对象System.IClonable.Clone() { }
因此,您只能通过显式转换到预期的接口来使用该方法。
答案 1 :(得分:2)
这不时出现。 :)查看以下内容......
void Main()
{
var e = new Example();
I i = e as I;
e.m1(); // prints Class m1()
i.m1(); // prints Interface m1()
}
public interface I
{
void m1();
}
public class Example : I
{
public void m1()
{
Console.WriteLine( "Class m1()" );
}
void I.m1()
{
Console.WriteLine( "Interface m1()" );
}
}