В C# используйте 'использование', чтобы удостовериться, что объект расположен, когда это выходит из объема. т.е.
using(IDataReader results = DbManager.ExecuteQuery(dbCommand, transaction))
{
while (results.Read())
{
//do something
}
}
кроме того, проверьте на нулевые значения после кастинга
MyObject obj = this.bindingSource.Current as MyObject;
if (MyObject != null)
{
// do something
}
кроме того, я использую перечисления, когда это возможно, чтобы избежать жесткого кодирования, опечаток и обеспечить легкое переименование при необходимости, т.е.
private enum MyTableColumns
{
UserID,
UserName
}
private enum StoredProcedures
{
usp_getMyUser,
usp_doSomething
}
public static MyUser GetMyUser(int userID)
{
List<SqlParameter> spParameters = new List<SqlParameter>();
spParameters.Add(new SqlParameter(MyTableColumns.UserID.ToString(), userID));
return MyDB.GetEntity(StoredProcedures.usp_getMyUser.ToString(), spParameters, CommandType.StoredProcedure);
}
Первая является переменной экземпляра и создает something
для каждого экземпляра SomeClass. Это похоже на C
typedef struct {
NSObject *something;
} SomeClass;
. Последний объявляет глобальную переменную, которая не имеет реальной связи с SomeClass. В C это эквивалентно
NSObject *something;
, определенному в глобальной области видимости. Objective-C на самом деле не имеет переменных класса, поэтому используются глобальные переменные (скорее, иногда используются; следует использовать переменные с единицей компиляции и статическим классом хранения ) .
Самый простой способ определения переменной «класса» - это определение статической переменной в файле реализации. Таким образом, только методы класса могут получить к нему доступ, и вы избежите загрязнения глобального пространства имен. Если вы хотите, чтобы он был общедоступным, определите средства доступа.
Правильное уничтожение переменных класса может быть непростой задачей. Память будет освобождена, а открытые файлы будут автоматически закрыты при выходе из приложения, но другие ресурсы могут обрабатываться не так хорошо.
Что касается вопроса "final vs const", то оба они похожи. Они заявляют, что значение не может измениться. обратите внимание, что в Java, поскольку все значения (кроме примитивов) являются указателями, объект, на который он указывает, может измениться внизу, но расположение в памяти (указатель) никогда не изменится. Я считаю, что вы ожидаете аналогичного поведения в Objective C, и всегда рекомендуется не позволять изменяемым элементам быть "final" или "const", поскольку значения внутри объекта все еще могут быть изменены.