1. 静的クラスと静的メンバーの機能的な特徴は何ですか? コードを実装しますか?
静的クラスと静的メンバーは、static キーワードを使用して定義されたクラスまたはメンバーを指します。静的クラスのすべてのメンバーは静的メンバーである必要があります。そうでない場合は、エラーが報告されます。静的クラスと静的メンバーの特徴の 1 つは、それらが一意であることです。静的クラスの場合はインスタンス化できず、メモリにロードされるのは 1 つだけです。静的変数またはメソッドの場合、このクラスがインスタンス化できる場合は、何度インスタンス化しても、常にロードされます。静的変数またはメソッドは 1 つだけです。
以下の通り:
(1)、静的メンバー
public class StatTicMember { public static string testA = string.Empty; } class Program { static void Main(string[] args) { //StaticConstruct strc = new StaticConstruct(); //StaticConstruct strcValue = new StaticConstruct(string.Empty); StatTicMember sMember1 = new StatTicMember(); StatTicMember.testA = @"静态成员"; Console.WriteLine(StatTicMember.testA); StatTicMember sMember2 = new StatTicMember(); Console.WriteLine(StatTicMember.testA); Console.ReadLine(); } }
結果:
静的メンバーの特性:
a. クラス名を通じて参照する必要があり、クラスのオブジェクトによって参照することはできません。クラスが何度インスタンス化されても、メモリ内には同じ領域しか存在しません
c メソッドの外にある変数またはメソッドが静的メソッドで参照される場合、それらも静的である必要があります (
public class StatTicMember { public static string testA = string.Empty; public string testB = string.Empty; public static void Method() { testA = @"my";//正确 //testB = @"my";//错误 } }
public static class StaticClass { public static string testA = string.Empty; public static void StaticMethod() { Console.WriteLine(@"静态方法"); } } class Program { static void Main(string[] args) { StaticClass.testA = @"静态类"; Console.WriteLine(StaticClass.testA); StaticClass.StaticMethod(); Console.ReadLine(); } }
静的クラスの特性:
a. メンバーも静的である必要があります。
b. クラス名を使用して内部メンバーを直接参照します。シールされたクラスは、このクラスが基底クラスとして使用できないことを意味します。つまり、派生クラスにすることはできません)
d. コンストラクターを含めることはできません。
静的クラスとメンバーを使用する場合、静的クラスは一度ロードされるとメモリ内に領域が存在し、使用するかどうかに関係なくそこに存在するため、広範囲に使用することはできません。メモリを占有します。次のような状況で使用できます:
a. グローバル変数、プロジェクト全体で使用される変数、値は簡単に変更できず、すべてのモジュールが変更された場合でも応答する必要があります。
b. インスタンス データを操作せず、コード内の特定のクラスに関連付けられていないメソッド (Math クラスの一部のメソッドなど)。
2. シーリング機能とは何ですか? コードを実装しますか? なぜシールされたクラスを使用するのでしょうか?
シールされたクラスは、sealed キーワードで変更されたクラスを指します。その目的は、派生を防ぐことです。つまり、このクラスは継承できません。
特徴: 基本クラスとして使用できず、抽象化できず、シールされたクラスへの呼び出しが高速になります。
public sealed class SealedClass { public string testA = string.Empty; }
抽象クラスとは、abstract キーワードで変更されたクラスを指します。その機能は、複数のクラスを派生し、基本クラスのパブリック メソッドとプロパティを共有することです。 抽象クラスとインターフェースの違い: a. クラスはオブジェクトを抽象化したものであり、抽象化されたクラスは抽象クラスと呼ばれます。 Microsoft のカスタム インターフェイスは、動作の仕様または規則にすぎません。これは、抽象クラスが一連の密接に関連するクラスを表現していることを証明する、able フィールドです。クラス、ほとんどのインターフェイスは緩やかに関連していますが、すべて特定の関数を実装しています。 b. インターフェイスには基本的に継承の特定の特性はなく、一度に 1 つのクラスを実装できます。ただし、拡張できるのは 1 つの親クラスだけです。 public abstract class AbstractClass
{
public abstract void CommonMethod();
}
public class ChildClass1 : AbstractClass
{
public override void CommonMethod()
{
Console.WriteLine(@"实现公用方法1");
}
}
public class ChildClass2 : AbstractClass
{
public override void CommonMethod()
{
Console.WriteLine(@"实现公用方法2");
}
}
class Program
{
static void Main(string[] args)
{
ChildClass1 chc1 = new ChildClass1();
chc1.CommonMethod();
ChildClass2 chc2 = new ChildClass2();
chc2.CommonMethod();
Console.ReadLine();
}
}
d. コールバックをサポートするためにインターフェイスを使用できます。
e. 抽象クラスによって実装される特定のメソッドは、次のとおりです。仮想ですが、インターフェースを実装するクラスのインターフェース メソッドはデフォルトで非仮想として宣言することもできます
インターフェースメソッドのデフォルトは非仮想 基本クラスリストにリストされているインターフェースのすべてのメンバーは、独自の実装。ただし、抽象クラスはインターフェイス メソッドを抽象メソッドにマップすることができます。h. 抽象クラスは、可変のものと不変のものを分離する原則を実装します。抽象クラスとインターフェイスは不変として定義され、変更可能なものは実装のためにサブクラスに残されます
i. 優れたインターフェイス定義には、多機能ではなく特定の機能が含まれている必要があります。そうでない場合、インターフェイス汚染が発生します。クラスがこのインターフェースの 1 つの関数のみを実装し、インターフェース内に他のメソッドを実装する必要がある場合、それはインターフェース汚染と呼ばれます。 抽象クラスがインターフェースを実装する場合、インターフェース内のメソッドは次のように抽象クラスにマッピングできます。抽象メソッドを実装する必要はありませんが、インターフェイス内のメソッドは抽象クラスのサブクラスに実装されます。
上記は上記の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) にご注意ください。関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。