我有一个抽象的类数字,其中包含Abstract properties
我在Derived类Rectangle和中覆盖它们
广场。现在,我想用Interface实现它。但我不能用
构造函数,我既不能声明里面的变量
Interface
。那么,如何使用Interface实现这一点,其中数字应该是接口和 Square和Rectangle应该是类?
abstract class Figures
{
int Width;
int _cs;
public Figures(int Width)
{
CS = Width;
}
public abstract int getarea
{
get;
}
public abstract int getperm
{
get;
}
public abstract int CS
{
set;
}
public abstract void display();
}
class Square : Figures
{
int _CsS;
public Square(int c) : base(c)
{
}
public override int getarea
{
get
{
return (_CsS * _CsS);
}
}
public override int getperm
{
get
{
return (2 * _CsS * _CsS);
}
}
public override int CS
{
set
{
_CsS = value;
}
}
public override void display()
{
Console.WriteLine("area={0} and perimeter={1}", getarea, getperm);
}
}
class Rectangle : Figures
{
int H;
int _csr;
public Rectangle(int H, int W) : base(W)
{
this.H = H;
}
public override int getarea
{
get
{
return H * _csr;
}
}
public override int getperm
{
get
{
return 2 * H * _csr;
}
}
public override int CS
{
set
{
_csr = value;
}
}
public override void display()
{
Console.WriteLine("area={0} and perimeter={1}", getarea, getperm);
}
}
答案 0 :(得分:1)
您可以这样做:
interface IFigures
{
int getarea
{
get;
}
int getperm
{
get;
}
int CS
{
set;
}
void display();
}
Thenk您可以从类中实现此接口,并在类本身内部执行逻辑。因此,不必将属性逻辑放在抽象类中,而是必须在子类中编写它们。
class Square : IFigures
{
int _CsS;
public Square(int c)
{
CS = c;
}
public int getarea
{
get
{
return (_CsS * _CsS);
}
}
public int getperm
{
get
{
return (2 * _CsS * _CsS);
}
}
public int CS
{
set
{
_CsS = value;
}
}
public void display()
{
Console.WriteLine("area={0} and perimeter={1}", getarea, getperm);
}
//here you have implemented properties
}
答案 1 :(得分:1)
所以如何使用Interface
实现这一点
根据定义,界面不会让你实现任何东西。您只能指定事物。
因此,您必须从接口IFigures
中删除ctor和字段,并在每个类中重新实现它们。您可以重复使用abstract class FiguresBase: IFigures
的实现,但这并不总是最佳设计。
这一切都取决于你想要界面的原因以及你将如何使用它。
答案 2 :(得分:0)
你的抽象课是一件好事。它允许您重用代码。
如果你想要实现松耦合系统,接口(即合同)也很好。
您可以将抽象类和接口结合使用,以实现代码可重用性和松散耦合的部分。
public interface IFigures
{
int getarea();
}
public abstract class Figures : IFigures
{
public abstract int getarea();
//opportunity for code reuse
protected int getarea_internal()
{
throw new NotimplementedExcpetion();
}
}
public class Square : Figures
public class Rectangle: Figures
答案 3 :(得分:0)
这是答案 与类图
//#3
func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController,
didFind match: GKTurnBasedMatch)
{
print(match)
myMatch = match
match.loadMatchData { (d, e) in
print(d ?? "No Data:")
let recievedData: [String: Any] = (NSKeyedUnarchiver.unarchiveObject(with: d!) as? [String : Any])!
// Check if data contains : "name" .. "value"
if recievedData["name"] != nil && recievedData["value"] != nil
{
let name = recievedData["name"] as! String
let val = recievedData["value"] as! Int
print("First Item: \(name)")
print("Second Item: \(val)")
}
print(e ?? "No Error:")
}
self.dismiss(animated: true, completion: nil)
//performSegue(withIdentifier: "GamePlayScene", sender: match)
}