Có thể return 1 method có cùng kiểu trả về từ 1 method khác được không

Em có một câu hỏi là: Em có 1 class có 1 static method( method2) với kiểu trả về là string. Trong một class khác em có 1 method(method1) cũng có kiểu trả về là string và method1 return method2. Em có chạy thử và nó chạy thành công nhưng em tìm trên GG không thấy tài liệu nào nói về 1 method có thể return 1 method khác cùng kiểu trả về cả. Mọi người giúp em giải thích vấn đề này được không ạ

using System;

public class Response
{
    public string Message { get; set; }
  
    public static  string  displayData(string data)
    {
        return data;
    }
}

public class A
{
    public string Getdata(string data)
    {
        return Response.displayData(data);
    }
}
public class Program
{
    public static void Main()
    {
        A a = new A();
        string response;
        response = a.Getdata("This is my data");
        Console.WriteLine("Method in Response class returns: " + response);

    }
}

=> Đây là kết quả chạy ra
Result

Hình thứ 1 của bạn post gì vậy, mình không đọc được @@

Tốt nhất là bạn đăng code của bạn lên đây dưới dạng text theo hướng dẫn:

Em sửa rồi đó anh ơi

Hai đoạn này tương đương.

return Response.displayData(data);
string result = Response.displayData(data);
return result;
4 Likes

Thế cũng tương tự với 2 đoạn code này phải không ạ
+Class chứa static method

 public class Response<T>
    {
        public bool Succeeded { get; set; }
        public int StatusCode { get; set; }
        public string Message { get; set; }
        public List<string> Errors { get; set; } = new List<string>();
        public T Data { get; set; } = default;

        public static Response<T> Success(int statusCode, T data)
            => new() { Succeeded = true, StatusCode = statusCode, Data = data };

        public static Response<T> Failure(string message, List<string> errors)
            => new() { Succeeded = false, Message = message, Errors = errors };
    
    }

+Service(ở class khác) return static method đó

public async Task<Response<AuthorDto>> CreateAuthor(CreateAuthorDto authorDto)
        {
            List<string> errors = new();           
            var check = await _unitOfWork.Authors.SingleOrDefaultAsync(x => x.Name.Equals(authorDto.Name));
            if (check != null)
            {
                errors.Add("Author has existed");
                return Response<AuthorDto>.Failure(Messages.BAD_REQUEST, errors);
            }
            if (string.IsNullOrWhiteSpace(authorDto.Name))
            {
                errors.Add("Author name cannot be null");
                return Response<AuthorDto>.Failure(Messages.BAD_REQUEST, errors);
            }

            var author = _mapper.Map<Author>(authorDto);

            await _unitOfWork.Authors.AddAsync(author);

            var result = await _unitOfWork.SaveAsync() > 0;

            if (!result)
            {
                errors.Add(Errors.ADD_FAILURE);
                return Response<AuthorDto>.Failure(Messages.SAVE_FAILURE, errors);
            }

            var response = _mapper.Map<AuthorDto>(author);
            return Response<AuthorDto>.Success(200, response);
        }

nếu bạn gọi cái này là method, thì xin chia buồn bạn đã mất kiến thức cơ bản
cái này là một câu lệnh - statement, cụ thể hơn là câu lệnh return

câu lệnh return này trả về một expression, là một lời gọi hàm Response.displayData(data)

return Response.displayData(data); // đây là một statement

Response.displayData(data) ở trong câu lệnh trên thì đây là một expression, còn nó đứng chơi chơi như một lệnh mà không thuộc bất kì lệnh nào thì nó gọi là statement vì bản thân nó là một lệnh

cú pháp của câu lệnh return

return expression;

trong đó return là keywork
expression là một cái gì đó trả về/diễn giải giá trị
; là token kết thúc câu lệnh

search những cuốn sách loại này
principles of programing language

haizz, nói trước luôn, đọc xong đầu óc sẽ quay quay, kiến thức sẽ tự thấm trong quá trình học/làm việc

khúc expression phức tạp thế ạ, e chỉ biết là câu lệnh return có thể trả về các biên,giá trị có kiểu dữ liệu nguyên thủy, hoặc kiểu đối tượng, các biểu thức,… chứ trả về thẳng một lời gọi hàm thì e chưa gặp. Như vậy theo anh nói expression là một cái gì đó trả về, vậy 1 lời gọi hàm như ví dụ của e cũng được tính hả anh.

ít nhất cũng nên search rồi hỏi, kiến thức đâu phải chỉ đọc cái comment là khỏi đọc sách đâu
ở trên đã giải thích đủ, đừng hỏi lại cái đã giải thích nữa

Cậu đọc comment của @tonghoangvu

Thực ra, cậu đang return giá trị trả về của method, chứ không phải return method.

// return giá trị 1
return 1;

// return giá trị chứa trong biến
int a = 1;
return a;

// return giá trị trả về của method
private int something() {
    return 1;
}
...
return something();

Cơm, cơm đựng trong bát, cơm được nấu từ nồi vẫn là cơm thôi.
Một giá trị nào đó, giá trị chứa trong biến, giá trị được trả về từ method cũng vẫn là giá trị thôi.

2 Likes

Em cám ơn ạ, em cũng đoán là return cái giá trị mà method trả về nhưng search gg không thấy tài liệu nào nói về việc này nên lên đây hỏi ạ. Cám ơn mọi người giải đáp giúp em ạ.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?