小编Woo*_*tsu的帖子

C#如何在派生类中添加属性设置器?

我有一个要求,我有许多类都从单个基类派生而来。基类包含子类列表,这些子类也从相同的基类派生。

所有类都需要能够获取特定的值,这些值可以从类本身获得-或-取决于派生类的种类,它是其父类。

我看过使用方法而不是属性,但是我还想使这些值可用于.NET报告组件,该组件可直接访问报告引擎中公开的公共属性,因此不包括方法的使用。

我的问题是,在BaseClass中没有公开可用的setter的情况下在DerivedClass中实现setter的“最佳实践”方法是什么?

public class BaseClass
{
  private BaseClass _Parent;
  public virtual decimal Result
  {
    get { return ((_Parent != null) ? _Parent.Result : -1); } 
  }
}

public class DerivedClass : BaseClass
{
  private decimal _Result;
  public override decimal Result
  {
      get { return _Result; }
      // I can't use a setter here because there is no set method in the base class so this throws a build error
      //set { _Result = value;  }
  }
}
Run Code Online (Sandbox Code Playgroud)

我无法在BaseClass中添加受保护的setter(如下所示),因为无法更改DerivedClass中的访问修饰符。 …

c# inheritance

8
推荐指数
2
解决办法
4859
查看次数

如何使这个C#方法通用?

如何使下面的代码通用,这样我最终可以用一个简单的函数来代替多个类中的多个函数?

下面对FindObject和CreateObject的调用是第三方库的一部分,所以我无法控制参数,这就是我遇到的问题.

private MyClass1 FindClass1Object( string code )
{
  MyClass1 myObject = FindObject<MyClass1>( code );

  if ( myObject == null )
  {
    myObject = CreateObject<MyClass1>( );
    myObject.Code = code;
  }

  return myObject;
}

private MyClass2 FindClass2Object( string code )
{
  MyClass2 myObject = FindObject<MyClass2 >( code );

  if ( myObject == null )
  {
    myObject = CreateObject<MyClass2 >( );
    myObject.Code = code;
  }

  return myObject;
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以传入一个额外的参数来指定我正在寻找/创建的类型但是然后代码卡在FindObject和CreateObject的调用上.

private object ReadClassFromXml ( string code, Type myType )
{
  object myObject = …
Run Code Online (Sandbox Code Playgroud)

.net c# generics

0
推荐指数
1
解决办法
68
查看次数

标签 统计

c# ×2

.net ×1

generics ×1

inheritance ×1