.NETのコアCSHARP主要記事1-5インタフェース、列挙型、抽象

.NETのコアCSHARP主要記事1-5

このセクションでは、クラス・インターフェース、列挙型、抽象

簡単な紹介

問題

  • あなたが使用して、週または特定の状態の日が必要な場合は、文字列や数値は、直感的ではありませんか?
  • あなたは、そのUSBポートは、特定の規範に従うように設計されているコンピュータの種類に関係なく、見つけませんか?

    数え上げます

    列挙(列挙型)は、非常に使いやすいが、彼はあなたが(通常は0から始まる)文字定数のシリーズを指定することができます値の特殊なタイプです。これは次のように定義して使用されます。
public enum Week
{
    Monday,
    ...//此处省略
    Sunday = 6//可赋值
}
bool flag = (6 == (int)Week.Sunday)

しかし、あなたはまた、例えば、値として他の列挙型を指定することができます。

public enum Week:byte
{
    Monday,
    ...
    Sunday= 6
}

他のタイプの変換とキャストを使用して列挙例えば、使用できます(int型)Week.Sundayが、特に、0を比較して列挙することができますキャストする必要はありません。

フラグ列挙型

これは面白い列挙です、それはビットで動作可能で列挙することができサポートし、フラグ列挙型を使用して上記の列挙に名前を属性に指定する必要があり、それには、[フラグ]で、一般的に言えば、我々は、2枚の電源として使用します値のために、本質的にバイナリ算術ビット単位からです。

次のように具体例としては、

[Flags]
public enum Status
{
    Success = 1,
    NotFound = 2,
    Fail = 4
}
//支持按位运算,运算步骤我们在之前已经有过详细的讲解
Status.Success | Status.NotFound

デフォルトでは、あなたが不当な列挙値(つまり、定義されていない)を入力した場合、コンパイラは、直接デジタル出力にデフォルト設定されますが、あなたはビット単位の列挙を使用している場合、彼はあなたが入力した数値になります各列挙&演算子でバイナリ値に変換し、結果を列挙値と比較され、見つかった場合は出力されます。

例えば、上記実施の状況:

Console.WriteLine((Status)7);
//输出是三个都输出
//7 = 0111,
//1 = 0001,
//2 = 0010
//4 = 0011

インターフェース

この事をインターフェイス、初心者が誤解することが非常に簡単です、WEBAPI開発のインスタンスのために、友人へのフロントエンドインターフェイスは、あなたが彼に与えることができます、彼は口の中で必要なものを、この時間は、バックエンドAPIと呼ばれる
あなたの友人は、バックエンドを言うとき、あなたインターフェースを書き、私たちは、この時間は、彼が慣例である必要がありますインターフェイスを実装統一された管理クラスの依存関係の注入を使用して、我々はここにインタフェース(インタフェース)であると言います。

インタフェースはポリモーフィズムを実現するための重要なオブジェクト指向のC#構文です。インタフェースの定義は、従来の仕様として理解することができます。このようなUSBポートとして、世界のコンピュータメーカーは、私たちが押し合意を生成しない場合、どのような結果になり、生産を標準化していますか?

C#では、インタフェースは、役割を果たしたものと同じですが、より広く使われているのいくつかあります。

interfaceキーワードインタフェース、デフォルトを使用して定義され、すべてのインターフェイスがメンバーあなたがアクセス権を定義した場合、確認するために、すべての仕様を公開する必要はまったく実用的な意味はないだろうであるとして、公衆にアクセスされ
、そしてすべてのインタフェース機能何の関数本体はありません。一般的には、インタフェースは、物事の標準クラスを提供することであるが、実装を提供していないということです。

インターフェースの例

//定义一个接口
public inteface IHuman
{
    void Eat();
    bool Alive();
}
//接口的实现,必须实现每一个接口中的函数并保持返回类型、函数签名,函数参数一致
public class Human:IHuman
{
    void Eat()
    {

    }
    bool Alive()
    {
        return default<bool>();
    }
}

そして、我々は程度の背後にある話を実現しますあなただけのクラスは複数のインタフェースをサポートするためのインタフェースを実装していますが、唯一のクラスができ継承することができます覚えておく必要が非常によく似たインターフェースを、継承されました。

インターフェイスの競合

彼らはクラスは複数のインタフェースを実装してサポートしているので、Aにつながる可能性があるとBのインタフェース機能はまったく同じインタフェースを持って、今回は明示的に処理するためのインタフェースを実装する必要があります。

あなたは同じメソッドシグネチャ異なるインターフェースを呼び出すために必要がある場合は、インタフェースをキャストすることができます。

例えば:

interface IApple
{
    void Wash();
}
interface IFruit
{
    void Wash();
}
class test : IApple,IFruit
{
    void IApple.Wash()=>{};
    void IFruit.Wash()=>{};
}
test t= new test();
((IApple)t).Wash();
((IFruit)t).Wash();

これは、指定されたインターフェイス上での競合を避けることができます。

あなたは暗黙的およびインタフェース実装されている場合は、デフォルトのすべてのインタフェース機能が密封されています。
これは、現在、それについて話をするのは時期尚早ではないかもしれない、私は躊躇なく、例えば、インタフェースから継承された動物のバイオ人間の継承と動物を問題の継承よりも言及したい場合は、
その後、人類のために、暗黙的に継承された生物学的なインターフェースでありますしかし、人間と動物のために、非常に異なる方法を食べ、その後、私たちは食べるのこのメソッドをオーバーライドする必要があります。
私たちは、仮想インターフェース機能のベースクラス(親クラス)がマークまたは抽象、その後、オーバーライドサブカテゴリを使用するように書き換えることされたいです。

これは後に、我々は飛行機の詳細な分析を実施すること、これまで述べてきました。

抽象

要約は、その上の抽象フィールド、抽象クラス、抽象手数料、抽象的機能などを持つことができます。私たちは、一般的な分析や抽象クラスを作るために使用されている抽象化機能を持っています。

抽象インターフェースはメソッドがその抽象メソッドではなく、インスタンス化できない抽象クラスに非常に類似して、サブクラス(継承クラス)動作に依存しています。

抽象機能

インタフェースとのほとんど同じ、あなたはそれはメソッド本体が、あなたはサブクラス(オーバーライド)の実装をオーバーライドする必要があり、存在しない場合、関数は関数抽象化で宣言した場合、あまりにも多くの話をする必要はありません。

ないコンテンツが定義された仮想メソッドとして抽象メソッドとして定義される親クラス、方法、又は方法を使用していない場合、実際には、親クラスまたは抽象メソッドの唯一のサブクラスは、仮想メソッドをオーバーライドします。

抽象クラス

「一つ以上の純粋仮想関数を含むことはまた、抽象クラス、インスタンス化できない抽象クラスと呼ばれる
抽象クラスインターフェースを、唯一のベースクラスとして、他を使用して。」

抽象クラスは、抽象と非抽象メソッドを含むことができるクラスは抽象クラスから継承する場合、次に派生クラスはすべて実装しなければならない
抽象基底クラスのメソッドを。

しかし、派生クラスも抽象的で宣言することで、我々は、すべてまたは特定の仮想メソッドの実現避けることができる
抽象クラスの一部です。

それは非常に深い見えますか?確かに抽象クラスは、関数の集まりであり、特定の関数がそのいくつかの方法なしで実装されているが備えられています。これは、インターフェイスの実装に比べて、抽象クラスは非抽象方法を提供することができ、すなわち、抽象クラスは、関数の実装を含むことがあり何もありません。

ここでは例です

public abstract class A
{
    public void GetSomeThing()
    {
        //todo
    }
    public abstract void SetSomeThing();
}
public class B:A
{
    //实现抽象方法
    public override void SetSomeThing()
    {
        //调用非抽象方法
        base.GetSomeThing();
    }

}

ベースキーワードが含まれている。この、および「:」より詳細な紹介があるでしょうもちろんの継承、多態性の裏に印を継承。

Githubの

嗶哩嗶哩ホーム

WarrenRyanのブログ

ブログパーク

おすすめ

転載: www.cnblogs.com/WarrenRyan/p/11223051.html