2

私はIBMページで.NET用のfilenetサンプルコードを探していましたが、これを見つけました。

namespace CESample
{
    // Represents the connection with the Content Engine.
    public class CEConnection
    {
        private IDomain domain;
        private IObjectStoreSet ost;
        private ArrayList osNames;
        private String domainName;
        private bool isCredentialsEstablished;

        // Constructor
        public CEConnection()
        {
            domain = null;
            ost = null;
            osNames = new ArrayList();
            domainName = null;
            isCredentialsEstablished = false;
        }

        //... other methods

オブジェクトの作成中に常にすべての変数をnullに設定するのは、これで問題ありませんか?そして、boolと新しいArrayList()はどうですか?それは私たちがそれを行うべき方法ですか?ブール値を常にfalseに設定しますか?

4

4 に答える 4

6

配列リスト以外は不要です。

コンストラクター内のコードが実行される前に、フィールドはそれぞれのデフォルト値で自動的に初期化されます。

このコードは同等です:

public class CEConnection 
{ 
    private IDomain domain; 
    private IObjectStoreSet ost; 
    private ArrayList osNames; 
    private String domainName; 
    private bool isCredentialsEstablished; 

    // Constructor 
    public CEConnection() 
    { 
        osNames = new ArrayList(); 
    } 
于 2012-09-03T14:54:04.407 に答える
3

予期しない動作を引き起こしたり、リソースを浪費したり、コードを読みにくくしたりしないという意味で「問題ありません」。

これらの変数(以外osNames)はすべて、コンストラクターが呼び出されるまでにすでにこれらの値を持っているため、不要です。ローカル変数とは異なり、インスタンス変数と静的変数には常に値があり(その値がnullであっても)、使用前に初期化する必要はありません。

于 2012-09-03T14:55:30.700 に答える
1

コンパイルする値に設定しても問題ありません。

本当の問題は、「コンストラクターに渡されるパラメーターを考慮すると、これはこのクラスを開始するための意味のある有効な状態ですか?」です。この場合、これはパラメータがないことを意味します。

これがコンストラクターの仕事であり、クラスを次のような状態にします。

  1. クラスのセマンティクスに有効です。
  2. パラメータがある場合は、それに関連します。

それを行うものは何でも構いません。

それを行わないものは、せいぜい重い(したがって、おそらく不適切な)最適化であり、最悪の場合は重大な欠陥です。

関連して、クラスの状態を変更して有効な状態のままにするのは、メソッドまたはプロパティの責任でもあります。

于 2012-09-03T14:57:49.497 に答える
0

フィールド変数が宣言されると、自動的にに初期化されdefault(T)ます。これは、参照変数の場合はnull、ブール値の場合はfalse、「数値」のValueTypes(Integer、Double、Decimal、...)の場合は0です。

したがって、これらのイニシャライザーは雑然としています。コードを長くするだけです。

ArrayListのdefault(T)もnullであるため、ArrayListの新しいインスタンスに設定する必要があることに注意してください。

于 2012-09-03T14:59:47.903 に答える