标签: abstract-class

内部抽象类:如何隐藏程序集外的用法?

我有一个公共程序集/项目,它有一个抽象基类,然后是几个我想公开给其他程序集的派生类.

我不希望抽象基类出现在Intellisense中的这些其他程序集中,所以我想我会成功internal,但是我得到了这个错误:

可访问性不一致:基类"设置"比"IrcSettings"类更难访问....

我真的不明白.我被迫制作抽象Settingspublic,因此在这个程序集之外可见.

我怎样才能成为这门课internal呢?

c# inheritance abstract-class access-modifiers

48
推荐指数
4
解决办法
2万
查看次数

Python中字段的NotImplementedError等效项

在Python 2.x中,当您想要将方法标记为抽象时,您可以像这样定义它:

class Base:
    def foo(self):
        raise NotImplementedError("Subclasses should implement this!")
Run Code Online (Sandbox Code Playgroud)

然后,如果您忘记覆盖它,您会收到一个很好的提醒异常.是否有相同的方法将字段标记为抽象?或者在类docstring中说明它你能做什么?

起初我以为我可以将字段设置为NotImplemented,但是当我查看它的实际内容(丰富的比较)时,它似乎是侮辱性的.

python abstract-class

47
推荐指数
3
解决办法
3万
查看次数

抽象类和接口之间有什么区别?

假设我们有两个方法M1(),并M2()在接口.抽象类也有两个相同的抽象方法.如果任何类实现了此接口或从抽象类继承,则必须同时实现其中的方法.

所以对我来说,似乎我的场景中的接口或抽象类的行为相同.那么,任何人都可以在这个特定的情况下突出显示这两者之间的区别,并建议是否在这里使用抽象类或接口?

c# oop abstract-class interface

47
推荐指数
1
解决办法
8万
查看次数

C#中的抽象构造函数

可能重复:
为什么我不能在抽象C#类上创建抽象构造函数?

为什么我不能像这样声明抽象类的构造函数:

public abstract class MyClass {
    public abstract MyClass(int param);
}
Run Code Online (Sandbox Code Playgroud)

.net c# constructor abstract-class

46
推荐指数
4
解决办法
5万
查看次数

如何在Django中查询基于抽象类的对象?

假设我有一个如下所示的抽象基类:

class StellarObject(BaseModel):
  title = models.CharField(max_length=255)
  description = models.TextField()
  slug = models.SlugField(blank=True, null=True)

  class Meta:
    abstract = True
Run Code Online (Sandbox Code Playgroud)

现在,假设我有两个从StellarObject继承的实际数据库类

class Planet(StellarObject):
  type = models.CharField(max_length=50)
  size = models.IntegerField(max_length=10)

class Star(StellarObject):
  mass = models.IntegerField(max_length=10)
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.如果我想获得行星或星星,我所做的就是:

Thing.objects.all() #or
Thing.objects.filter() #or count(), etc...
Run Code Online (Sandbox Code Playgroud)

但是如果我想获得所有StellarObjects呢?如果我做:

StellarObject.objects.all()
Run Code Online (Sandbox Code Playgroud)

它当然会返回错误,因为抽象类不是实际的数据库对象,因此无法查询.我读过的所有内容都说我需要做两个查询,一个是行星和星星,然后合并它们.这似乎非常低效.这是唯一的方法吗?

django abstract-class

46
推荐指数
4
解决办法
1万
查看次数

具有公共getter的抽象属性,可以在具体类中定义私有setter吗?

我正在尝试创建一个使用getter定义属性的抽象类.我想将它留给派生类来决定是否要为属性实现setter.这可能吗?

到目前为止我所拥有的:

public abstract class AbstractClass {
    public abstract string Value { get; }
    public void DoSomething() {
        Console.WriteLine(Value);
    }
}

public class ConcreteClass1 : AbstractClass {
    public override string Value { get; set; }
}

public class ConcreteClass2 : AbstractClass {
    private string _value;
    public override string Value {
        get { return _value; }
    }
    public string Value {
        set { _value = value; }
    }
}

public class ConcreteClass3 : AbstractClass {
    private string _value;
    public override string …
Run Code Online (Sandbox Code Playgroud)

c# getter setter abstract-class properties

46
推荐指数
2
解决办法
6万
查看次数

如何在C#5.0中强制异步子覆盖

我正在研究一个系统,其中多个客户端对象需要通过接口实现特定的功能,我希望该函数与continuation异步运行(我希望这些实现是I/O绑定的并且想要确保所有客户端对象尽快完成此功能).我正在使用Visual Studio异步CTP刷新SP1,C#"5.0".

在抽象类的子对象中强制执行异步行为的推荐做法是什么(见下文)?我不能(显然)使用虚方法方法强制使用'异步'方法.我只能要求'任务'返回类型.这是否意味着我不应该尝试在子对象中完全要求异步行为?在这种情况下,返回类型应该简单地"无效"吗?

公共接口现在是系统设计的一个不幸后果,但这是一个单独的问题.显然,我无法限制任何人绕过'BaseFoo'并实现'IFoo'接口的异步.

这是代码:

public interface IFoo
{
    void Bar(); //NOTE: Cannot use 'async' on methods without bodies.
}

public abstract class BaseFoo : IFoo
{
    public async void Bar()
    {
        await OnBar(); //QUESTION: What is the right "async delegation" pattern?
    }

    protected virtual async Task OnBar()
    {
        await TaskEx.Yield();
    }
}

public class RealFoo : BaseFoo //NOTE: May be implemented by 3rd party
{
    protected override async Task OnBar()
    {
        //CLIENT: Do work, potentially awaiting async calls

        await …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class asynchronous async-await c#-5.0

46
推荐指数
2
解决办法
3万
查看次数

Helper/Utility Classes应该是抽象的吗?

我经常发现自己将类中的常见行为提取到helper/utility类中,这些类只包含一组静态方法.我经常想知道我是否应该将这些类声明为抽象类,因为我无法真正想到实例化这些类的正当理由?

优点和缺点是宣布这样一个类是抽象的.

public [abstract] class Utilities{

   public static String getSomeData(){
       return "someData";
   }

   public static void doSomethingToObject(Object arg0){
   }
}
Run Code Online (Sandbox Code Playgroud)

java abstract-class

45
推荐指数
3
解决办法
1万
查看次数

自定义属性在抽象属性上的继承

我有一个自定义属性,我想应用于我的基本抽象类,以便我可以跳过在HTML中显示项目时用户不需要查看的元素.似乎覆盖基类的属性不继承属性.

重写基本属性(抽象或虚拟)是否会破坏原始属性上的属性?

从属性类定义

[AttributeUsage(AttributeTargets.Property,
                Inherited = true,
                AllowMultiple = false)]
public class NoHtmlOutput : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)

从抽象类定义

[NoHtmlOutput]
public abstract Guid UniqueID { get; set; }
Run Code Online (Sandbox Code Playgroud)

从混凝土类定义

public override Guid UniqueID{ get{ return MasterId;} set{MasterId = value;}}
Run Code Online (Sandbox Code Playgroud)

从类检查属性

        Type t = o.GetType();
        foreach (PropertyInfo pi in t.GetProperties())
        {
            if (pi.GetCustomAttributes(typeof(NoHtmlOutput), true).Length == 1)
                continue;
            // processing logic goes here
        }
Run Code Online (Sandbox Code Playgroud)

c# reflection attributes abstract-class

45
推荐指数
2
解决办法
2万
查看次数

在C++中使用接口的性能损失?

在C++中使用接口(抽象基类)时是否存在运行时性能损失?

c++ performance abstract-class virtual-functions

42
推荐指数
4
解决办法
1万
查看次数