Afaik,在 C# 中,接口中的任何实现方法都必须是公共的。
interface A { void DoA(); }
class B : A { public void DoA() {} }
Run Code Online (Sandbox Code Playgroud)
但如果你继承的接口又继承自另一个接口,那么你可以将基接口方法标记为私有。
interface A1 { void DoA1(); }
interface A2 : A1 { void DoA2(); }
class B : A2
{
public void DoA2() { } // Still need to be marked as public
void A1.DoA1() { } // Can be marked as private
// or I can do this: public void DoA1() { }
}
Run Code Online (Sandbox Code Playgroud)
class MyClass : IEnumerable<SomeType>当我看到一个班级这样做时,我首先注意到这一点。
public …Run Code Online (Sandbox Code Playgroud) 我有一个 OLED SPI 显示屏 128x64,我使用 Adafruit_GFX 和 Adafruit_SSD1306 来控制它。我有一个类名 Engine,它有一个像这样的公共构造函数:
Engine::Engine() {
display.begin(2U, 0U, true, false);
// Define some pinmode not a problem
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(buzzerPin, OUTPUT);
//clear the screen and display
clearScreen();
display.display();
time = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后在我的 .ino 文件中我有这样的内容:
Engine engine = Engine();
void setup() {
Serial.begin(115200);
Serial.println("testing...");
}
Run Code Online (Sandbox Code Playgroud)
问题是程序有点冻结。我不知道代码是否有效(我认为没有)。我尝试调试它,如果我在设置中声明了引擎,那就没问题了。或者,如果我删除该行display.begin()并将声明保留在设置之外。为什么?我需要打电话display.begin()进去吗setup()?如何摆脱这个困境?
PS:我为此使用了视觉微型。但之后我将代码移至Arduino,问题仍然出现。
我是 C 的新手。 printf、vprintf、vfprintf、vsprintf 和 vsnprintf 之间有什么区别?